1

我不知道如何从 XML 文档中提取值,并且正在寻找一些帮助,因为我是 C# 新手

我正在使用XmlDocument然后XmlNodeList用于获取特定的 XML 文档

这是我的代码

XmlNodeList XMLList = doc.SelectNodes("/response/result/doc");

我的 XML 看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<response>
<result>
  <doc>
    <long name="LoadID">494</long>
    <long name="EventID">5557</long>
    <str name="XMLData"><TransactionDate>2014-05-28T14:17:31.2186777-06:00</TransactionDate><SubType>tblQM2222Components</SubType><IntegerValue title="ComponentID">11111</IntegerValue></str></doc>
  <doc>
    <long name="LoadID">774</long>
    <long name="EventID">5558</long>
    <str name="XMLData"><TransactionDate>2014-05-28T14:17:31.2186777-06:00</TransactionDate><SubType>tblQM2222Components</SubType><IntegerValue title="ComponentID">11111</IntegerValue></str></doc>
</result>
</response>

在此我必须获取每个XMLData下的每个数据,doc tag并且我必须获取最后一个文档标签EventID

4

3 回答 3

1
var xml = XDocument.Parse(xmlString);

var docs = xml.Root.Elements("doc");

var lastDocEventID = docs.Last()
                         .Elements("long")
                         .First(l => (string)l.Attribute("name") == "EventID")
                         .Value;

Console.WriteLine ("Last doc EventId: " +lastDocEventID);

foreach (var doc in docs)
{
    Console.WriteLine (doc.Element("str").Element("TransactionDate").Value);
}

印刷:

Last doc EventId: 5558
2014-05-28T14:17:31.2186777-06:00
2014-05-28T14:17:31.2186777-06:00
于 2013-05-23T09:21:51.757 回答
1

您可以使用两个 XPath 表达式来选择所需的节点。依次回答问题的每个部分:

选择所有XMLData节点:

XmlNodeList XMLList 
      = doc.SelectNodes("/response/result/doc/str[@name='XMLData']");

要选择最后一个 EventId:

XmlNode lastEventIdNode = 
   doc.SelectSingleNode("/response/result/doc[position() = 
                          last()]/long[@name='EventID']");

如果不能保证所有 doc 节点都有一个事件 id 子节点,那么您可以简单地:

XmlNodeList eventIdNodes = 
    doc.SelectNodes("/response/result/doc[long[@name='EventID']]");
XmlNode lastNode = eventIdNodes[eventIdNodes.Count - 1];

那应该给你你所要求的。

更新;

如果您想要每个 strXml 元素内的 XML 数据,您可以使用InnerXml属性:

XmlNodeList xmlList 
      = doc.SelectNodes("/response/result/doc/str[@name='XMLData']");
foreach(XmlNode xmlStrNode in xmlList)
{
    string xmlInner = xmlStrNode.InnerXml;
}
于 2013-05-23T09:48:35.463 回答
0

您的 xml 中有一个result短标签。

尝试使用这个。它太干净了恕我直言

XmlNodeList docs = doc.SelectSingleNode("response").SelectSingleNode("result").SelectNodes("doc");

然后,您可以使用SelectSingleNode, InnerText,的组合Value从列表中的每个 XmlNode 获取数据。

例如,如果您想要第一个doc标签中的 EventID:

int eventID = int.Parse(docs[0].SelectSingleNode("long[@name='EventID']").InnerText);
于 2013-05-23T09:17:45.183 回答