从同名节点获取值
本文关键字:获取 节点 | 更新日期: 2023-09-27 18:13:07
我想从XML文件中检索信息,但是它的格式化方式非常奇怪。
<?xml version="1.0"?>
<Careers>
<CareerList>
<CareerName></CareerName>
<CareerDescription></CareerDescription>
</CareerList>
<CareerList>
<CareerName>Cook</CareerName>
<CareerDescription>Cooks food for people</CareerDescription>
</CareerList>
</Careers>
我想获得第二个值,即Cook和描述,即Cooks food for people,但我只获得空节点。例如…
public string CareerDescription(string CareerFile)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(CareerFile);
string Description = xmlDoc.SelectSingleNode("Careers/CareerList/CareerDescription").InnerText;
return Description;
}
我如何选择第二个节点而不是第一个节点?
可以在XPath表达式中使用索引:
xmlDoc.SelectSingleNode("Careers/CareerList[2]/CareerDescription").InnerText
我个人会使用LINQ to XML,请注意:
var doc = XDocument.Load(CareerFile);
return doc.Root
.Elements("CareerList")
.ElementAt(1) // 0-based
.Element("CareerDescription")
.Value;
您应该使用SelectNodes
代替SelectSingleNode
:它将返回XmlNodeList nodeList
。然后应该从索引为[1];
InnerText
public string CareerDescription(string CareerFile)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(CareerFile);
string Description = xmlDoc.SelectNodes("Careers/CareerList/CareerDescription")[1].InnerText;
return Description;
}
详细信息请参考MSDN上关于此方法的文档:http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.selectnodes%28v=vs.71%29.aspx
这是LINQ到XML例程的一种直接方式(因为它是LINQ,所以我更喜欢这种方式,而不是XmlDocument的"标准"使用和XPath的支持):
return XDocument.Load(CareerFile)
.Descendants("CareerDescription").Skip(1).First().Value;