我不知道如何从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
数据,并且我必须获取最后一个doc标记EventID
。
答案 0 :(得分: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
答案 1 :(得分: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;
}
答案 2 :(得分: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);