0

我有一个菜鸟问题。我通过它的属性选择一个节点,然后我想获得它的子节点值,但我总是得到第一个节点值。我的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 内容也是正确的,但我总是得到第一个站点的名称(示例中为罗马)。你能帮助我吗?

4

2 回答 2

1

您编写siteNode.SelectSingleNode("//Code")which target 所有 Code 节点,而不是siteNode.SelectSingleNode("Code")仅针对元素内的 Code 节点。

于 2015-03-16T15:32:36.233 回答
0

应该只是不

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

siteNode.SelectSingleNode("Code")...

这是因为//CodeXpath 表达式的意思是“文档中的所有“代码”元素”,但您只需要siteNode.

请参阅Xpath 语法示例以供参考。

于 2015-03-16T15:25:45.527 回答