按ID的FInd元素然后获取XML文档中的内容

时间:2015-01-06 01:20:20

标签: c# xml

我有一个XML文档

<?xml version="1.0" encoding="utf-8" ?>
<data>
  <string id="test-text">Some sample text from XML</string>
  <string id="test-text2">Some more sample text</string>
</data>

我已经加载到XmlDocument对象中,我正在尝试使用id获取文本。我可能在这里遗漏了一些非常明显的东西,但这就是我目前正在尝试做的事情。

    XmlElement elem = doc.GetElementById("test-text");
    return elem.Value;

2 个答案:

答案 0 :(得分:1)

您可能需要elem.InnerText而不是elem.Value.

从类文档InnerText Gets or sets the concatenated values of the node and all its children开始,Value是从XmlNode继承的属性,对属性节点,文本节点等有用,但不是&# 39; t真的适用于像XmlElement这样的节点。在根据您的文档构建的DOM树中,您正在查找的XmlElement将包含Text节点,其Value是您尝试检索的字符串。

答案 1 :(得分:1)

GetElementById仅适用于通过DTD定义的ID属性(不太可能的情况,绝对不是您的样本):

  

...此版本的产品仅支持DTD中定义的版本。名称为&#34; ID&#34;的属性除非在DTD中定义,否则不是ID类型。不知道属性是否为ID类型的实现应该返回null。

您需要具有属性检查的基本XPath:

var d = new XmlDocument();
d.LoadXml(@"<data>
  <string id='test-text'>Some sample text from XML</string>
  <string id='test-text2'>Some more sample text</string>
</data>");
var elem = d.SelectSingleNode("//*[@id='test-text']");
Console.WriteLine(elem.InnerText);

Live demo