从节点选定属性中获取节点值

时间:2015-03-16 15:17:22

标签: c# xml attributes selectsinglenode

我有一个noob问题。我按其属性选择一个节点,而不是我想得到它的子节点值,但我总是得到第一个节点值。 我的xml:

<Sites>
  <Site ID="032">
    <Name>
    Rome
    </Name>
    <Code>
      ---
    </Code>
    <Visible>
      true
    </Visible>
</Site>
  <Site ID="040">
    <Name>
    Paris
    </Name>
    <Code>
      ---
    </Code>
    <Visible>
      true
    </Visible>
<Site>
  <Site ID="055">
    <Name>
    Berlin
    </Name>
    <Code>
      ---
    </Code>
    <Visible>
      true
    </Visible>
</Site>
</Sites>

我的代码:

XmlDocument xSite = new XmlDocument();
xSite.Load("Data\\Site.xml");
XmlNode siteNode = xSite.SelectSingleNode("/Sites/Site[@ID='" + _selectedSite.ID + "']");
string sitenodestr = siteNode.InnerText;
_selectedSite.Code = siteNode.SelectSingleNode("//Code").InnerText.Trim();
_selectedSite.Name = siteNode.SelectSingleNode("//Name").InnerText.Trim();
string visib = siteNode.SelectSingleNode("//Visible").InnerText.Trim();
_selectedSite.Visibility = Convert.ToBoolean(visib);

我检查过并且ID正确,并且siteNode内容也正确,但我总是得到第一个站点的名称(示例中的罗马)。 你能救我吗?

2 个答案:

答案 0 :(得分:1)

您编写siteNode.SelectSingleNode("//Code"),其目标是所有代码节点而不是siteNode.SelectSingleNode("Code"),以仅定位元素内的代码节点。

答案 1 :(得分:0)

应该不是

siteNode.SelectSingleNode("//Code")...

siteNode.SelectSingleNode("Code")...

这是因为//Code Xpath表达意味着&#34;所有&#34;代码&#34;文档中的元素&#34;,但您只需要siteNode的孩子。

请参阅Xpath syntax examples以供参考。