在C#中解析XML响应

时间:2017-08-30 07:04:30

标签: c# xml

我从远程服务器获取响应,其字符串包含XML,如下所示:

<?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>

我想在不同的变量中读取每个TransactionSegment的所有子属性:

String RECEIPT_NO="SC10333";
String INV_AMT="1494.9"

提前致谢。

4 个答案:

答案 0 :(得分:1)

您可以编写自己的XML解析器,也可以使用Linq2XML。

XElement xml = XElement.Parse(xmlResponseAsString);
IEnumerable<XElement> segmentItems =  xml.Elements("TransactionSegment");

答案 1 :(得分:0)

    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");

答案 2 :(得分:0)

有多种方法可以做到这一点。使用XML反序列化的最佳方法。以下是使用LINQ的替代方法。

day

答案 3 :(得分:0)

您可以使用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>;