c# - 从 XMLDocument 中提取数据
问题描述
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetMessage xmlns="http://tempuri.org/">
<GetMessageResult>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="inLogSMS">
<xs:complexType>
<xs:sequence>
<xs:element name="InLogID" type="xs:int" minOccurs="0" />
<xs:element name="FromMobile" type="xs:string" minOccurs="0" />
<xs:element name="ContactName" type="xs:string" minOccurs="0" />
<xs:element name="SMSText" type="xs:string" minOccurs="0" />
<xs:element name="ReceiveAt" type="xs:dateTime" minOccurs="0" />
<xs:element name="Status" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns="">
<inLogSMS diffgr:id="SMS1" msdata:rowOrder="0">
<InLogID></InLogID>
<FromMobile></FromMobile>
<ContactName></ContactName>
<SMSText>Test2</SMSText>
<ReceiveAt></ReceiveAt>
<Status>New</Status>
</inLogSMS>
<inLogSMS diffgr:id="SMS2" msdata:rowOrder="1">
<InLogID></InLogID>
<FromMobile></FromMobile>
<ContactName></ContactName>
<SMSText>TEST</SMSText>
<ReceiveAt></ReceiveAt>
<Status>New</Status>
</inLogSMS>
</NewDataSet>
</diffgr:diffgram>
</GetMessageResult>
</GetMessage>
我已经尝试了好几天,任何人都可以告诉我如何提取 SMSText 元素和状态元素的数据。非常感谢。标签太多,直到我感到困惑
var responseXml = new XmlDocument();
XmlNodeList items = responseXml.GetElementsByTagName("/GetMessage/inLogSMS"); foreach (XmlNode xItem in items) { string id = xItem["SMSText"].InnerText; Console.WriteLine(id); Console.ReadLine(); }
解决方案
您甚至不需要类似 XPath 的表达式来访问元素:
XmlDocument responseXml = new XmlDocument();
responseXml.Load("path to your XML");
foreach (XmlElement e in responseXml.GetElementsByTagName("inLogSMS"))
{
Console.WriteLine("Text: " + e.GetElementsByTagName("SMSText")[0].InnerText);
Console.WriteLine("Status: " + e.GetElementsByTagName("Status")[0].InnerText);
}
而不是XmlDocument
你可以使用XDocument
.
首先,您需要加载 XML;有两种方法:
1. XDocument x = XDocument.Parse("your XML as string");
2.XDocument x = XDocument.Load("The path to your XML");
之后,您可以使用 访问任何元素Descendants()
。
例如:
foreach (var e in x.Descendants("inLogSMS"))
{
Console.WriteLine("Text: " + e.Element("SMSText").Value);
Console.WriteLine("Status: " + e.Element("Status").Value);
}
两种方式都会打印:
文本:Test2
状态:新
文本:TEST
状态:新
推荐阅读
- php - 如何在循环外设置在while循环中生成的提交按钮?
- c# - 假货不支持框架.net 5
- python - 安全提示 Paypal
- php - ACF 滑块与每个帖子循环
- mysql - 在 mysql 中,如果我有一个列(名称 VARCHAR(5))并且我正在插入一个超过 5 个字符的字符串,它正在工作。但是如何?
- javascript - 如何进一步模块化快递路线?
- python - 使用 tkinter 类导入错误 Python 3
- c++ - 带有空子序列的 std::search
- flutter - 在点击 TextFormField 后可见前缀文本,否则为空白
- ios - 有没有办法重写函数或函数的 .option?