用于选择第二个元素的XML中的SelectSingleNode在C#中不起作用

时间:2015-08-06 12:18:33

标签: c# xml

我在以下示例xml代码中从根元素中选择第二个节点时遇到问题:

<?xml version="1.0"?>
<config>
    <FirstNode>
        <ShowBlahBlah>
        </ShowBlahBlah>
    </FirstNode>
    <SecondNode>
        <ShowBlahBlah>
        </ShowBlahBlah>
    </SecondNode>
</config>

并使用此C#代码选择SecondNode:

XmlDocument doc = new XmlDocument();
doc.LoadXml(sReadXML);
XmlNode sChangesLog = doc.SelectSingleNode("config").SelectSingleNode("//SecondNode").SelectSingleNode("//ShowBlahBlah")
XmlNodeList sChildNodes = sChangesLog.ChildNodes;

但它选择第一个节点并返回其值! 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您在每个选择的开头都使用// - 这意味着"find descendant nodes starting at the root"(因此上下文无关紧要)。根据Jeffrey的回答,您可以一步完成任务,也可以使用相对路径:

doc.SelectSingleNode("config")
   .SelectSingleNode("SecondNode")
   .SelectSingleNode("ShowBlahBlah")

就个人而言,如果可能的话,我会使用LINQ to XML:

var doc = XDocument.Parse(sReadXml);
var changes = doc.Root.Element("SecondNode").Element("ShowBlahBlah");

LINQ to XML通常是一个很多更清洁的API,而不是XmlDocument等。