使用c#获取XML节点的内容

时间:2010-06-03 15:23:33

标签: c# xml xpath

简单的问题,但我一直在玩它一个小时,它真的开始让我感到沮丧。我的XML看起来像这样:

  <TimelineInfo>
    <PreTrialEd>Not Started</PreTrialEd>
    <Ambassador>Problem</Ambassador>
    <PsychEval>Completed</PsychEval>
  </TimelineInfo>

我想要做的就是使用C#来获取存储在<Ambassador></Ambassador>之间的字符串。

到目前为止,我有:

XmlDocument doc = new XmlDocument();
doc.Load("C:\\test.xml");
XmlNode x = doc.SelectSingleNode("/TimelineInfo/Ambassador");

选择说明就好了,现在我在世界上如何获得内容?

4 个答案:

答案 0 :(得分:15)

我建议看看LINQ-to-XML(System.Xml.Linq)?

var doc = XDocument.Load("C:\\test.xml");

string result = (string)doc.Root.Element("Ambassador");

LINQ-to-XML比Xml *类(System.Xml)友好得多。


否则,您应该能够通过检索InnerText属性来获取元素的值。

string result = x.InnerText;

答案 1 :(得分:4)

InnerText属性应该可以正常使用。

http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.innertext.aspx

FWIW,您可以考虑将API切换为linq-to-xml(XElement和朋友),因为它是一个友好,更容易与之交互的API。

System.Xml版本(注意:不需要转换为XmlElement)

var xml = @"<TimelineInfo>
                <PreTrialEd>Not Started</PreTrialEd>
                <Ambassador>Problem</Ambassador>
                <PsychEval>Completed</PsychEval>
            </TimelineInfo>";
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
var node = doc.SelectSingleNode("/TimelineInfo/Ambassador");
Console.WriteLine(node.InnerText);

linq-to-xml版本:

var xml = @"<TimelineInfo>
                <PreTrialEd>Not Started</PreTrialEd>
                <Ambassador>Problem</Ambassador>
                <PsychEval>Completed</PsychEval>
            </TimelineInfo>";
var root = XElement.Parse(xml);
string ambassador = (string)root.Element("Ambassador");
Console.WriteLine(ambassador);

答案 2 :(得分:3)

XmlDocument doc = new XmlDocument();
doc.Load("C:\\test.xml");
XmlNode x = doc.SelectSingleNode("/TimelineInfo/Ambassador");

x.InnerText将返回内容

答案 3 :(得分:0)

尝试使用Linq to XML - 它提供了一种查询xml数据源的简便方法 - http://msdn.microsoft.com/en-us/library/bb387098%28v=VS.100%29.aspx