2017-08-30 8 views
0

に私は以下のようにXMLを含む文字列としてリモートサーバからの応答を取得しています:解析XML Responceは、C#

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

ありがとうございます。

+1

TransactionSegmentモデルを作成可能な複製(https://stackoverflow.com/questions/2915294/iterating-through-all-nodes-in-xml-file) –

+2

このプラットフォームにはこの質問に対する回答がたくさんあります。最初に質問をGoogleにお願いします。例:https://stackoverflow.com/questions/2915294/iterating-through-all-nodes-in-xml-file –

答えて

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

http://www.doublecloud.org/2013/08/parsing-xml-in-ca-クイックワーキングサンプル/ –

0

これを行うには複数の方法があります。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 
       } 
      } 
     } 
1

独自のXMLパーサーを作成したり、Linq2XMLを使用したりできます。

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

XMLデシリアライズを使用できます。 [XMLファイル内のすべてのノードを反復]の

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