C# 在C中解析XML响应#
我从远程服务器得到的响应是一个字符串,其中包含XML,如下所示:C# 在C中解析XML响应#,c#,xml,C#,Xml,我从远程服务器得到的响应是一个字符串,其中包含XML,如下所示: <?xml version="1.0" encoding="utf-16"?> <abcTransactionSegment> <TransactionSegment> <RECORD_TYPE>G100</RECORD_TYPE> <POS_TILL></POS_TILL> <SHIFT_NO
<?xml version="1.0" encoding="utf-16"?>
<abcTransactionSegment>
<TransactionSegment>
<RECORD_TYPE>G100</RECORD_TYPE>
<POS_TILL></POS_TILL>
<SHIFT_NO></SHIFT_NO>
<RECEIPT_NO>SC10333</RECEIPT_NO>
<TIMESTAMP>2017-08-01T20:12:35.84+05:30</TIMESTAMP>
<INV_AMT>1494.9</INV_AMT>
<TAX_AMT>269.1</TAX_AMT>
<DIS_AMT>1495</DIS_AMT>
<NET_AMT>1764</NET_AMT>
<RET_AMT>0</RET_AMT>
<CUST_NAME>MAYUR</CUST_NAME>
<TRANSACTION_STATUS>SALES</TRANSACTION_STATUS>
</TransactionSegment>
<TransactionSegment>
.
.
</TransactionSegment>
</abcTransactionSegment>
提前感谢。XmlDocument doc=new XmlDocument();
XmlDocument doc = new XmlDocument();
//load xml
doc.Load(yourXMLString);
or
doc.LoadXml("<?xml version="1.0" encoding="utf-16"?>
<abcTransactionSegment>
<TransactionSegment>
<RECORD_TYPE>G100</RECORD_TYPE>
<POS_TILL></POS_TILL>
<SHIFT_NO></SHIFT_NO>
<RECEIPT_NO>SC10333</RECEIPT_NO>
<TIMESTAMP>2017-08-01T20:12:35.84+05:30</TIMESTAMP>
<INV_AMT>1494.9</INV_AMT>
<TAX_AMT>269.1</TAX_AMT>
<DIS_AMT>1495</DIS_AMT>
<NET_AMT>1764</NET_AMT>
<RET_AMT>0</RET_AMT>
<CUST_NAME>MAYUR</CUST_NAME>
<TRANSACTION_STATUS>SALES</TRANSACTION_STATUS>
</TransactionSegment>
<TransactionSegment>
.
.
</TransactionSegment>
</abcTransactionSegment>");
//finding node
XmlNode node = doc.DocumentElement.SelectSingleNode("/abcTransactionSegment/TransactionSegment/RECORD_TYPE");
//加载xml
doc.Load(您的xmlstring);
或
doc.LoadXml(“
G100
SC10333
2017-08-01T20:12:35.84+05:30
1494.9
269.1
1495
1764
0
玛尤
出售
.
.
");
//查找节点
XmlNode node=doc.DocumentElement.SelectSingleNode(“/abCtrTransactionSegment/TransactionSegment/RECORD_TYPE”);
有多种方法。最好的方法是使用XML反序列化。下面是使用LINQ的替代方法
XDocument doc = XDocument.Load(xml);//Load your XML data here.
if (doc.Descendants("abcTransactionSegment").Any()) // Check for root
{
if (doc.Descendants("abcTransactionSegment").Elements("TransactionSegment").Count() > 0)
{
foreach (var xmlElements in doc.Descendants("abcTransactionSegment").Elements("TransactionSegment"))
{
string RECEIPT_NO = xmlElements.Element("RECEIPT_NO") != null ? xmlElements.Element("RECEIPT_NO").Value : "";// It will give you the node value
}
}
}
您可以编写自己的XML解析器,也可以使用Linq2XML
XElement xml = XElement.Parse(xmlResponseAsString);
IEnumerable<XElement> segmentItems = xml.Elements("TransactionSegment");
XElement xml=XElement.Parse(xmlResponseAsString);
IEnumerable segmentItems=xml.Elements(“TransactionSegment”);
您可以使用XML反序列化。
创建TransactionSegment模型
public int RECORD_TYPE {get;set;}
pub string POS_TILL {get;set;}
Dim a List<TransactionSegment> Model listTransactionSegment
System.IO.StringReader stringReader = new System.IO.StringReader(Xml);
System.Xml.Serialization.XmlSerializer xmlSerializer = new
System.Xml.Serialization.XmlSerializer(typeof(List<TransactionSegment>));
//
listTransactionSegment=xmlSerializer.Deserialize(stringReader) as
List<TransactionSegment>;
public int RECORD_TYPE{get;set;}
发布字符串POS_,直到{get;set;}
调整列表模型listTransactionSegment的尺寸
System.IO.StringReader StringReader=新的System.IO.StringReader(Xml);
System.Xml.Serialization.XmlSerializer XmlSerializer=新建
System.Xml.Serialization.XmlSerializer(typeof(List));
//
listTransactionSegment=xmlSerializer。反序列化(stringReader)为
列表
此平台上有大量关于此问题的答案。请先用谷歌搜索你的问题。如:
public int RECORD_TYPE {get;set;}
pub string POS_TILL {get;set;}
Dim a List<TransactionSegment> Model listTransactionSegment
System.IO.StringReader stringReader = new System.IO.StringReader(Xml);
System.Xml.Serialization.XmlSerializer xmlSerializer = new
System.Xml.Serialization.XmlSerializer(typeof(List<TransactionSegment>));
//
listTransactionSegment=xmlSerializer.Deserialize(stringReader) as
List<TransactionSegment>;