(C# ) 解析XML。


解析XML有很多方法,之前用專門寫的XMLProcess 或XMLHelper 解析類。其實有個較簡單的解析就是用Linq查詢。

例如有如下XML

<?xml version="1.0" encoding="utf-8" ?>
<outArgs>
  <arg-xml>
    <scanners>
      <scanner type="USBIBMHID">
        <scannerID>2</scannerID>
        <modelnumber>DS6708-SR20007ZZR</modelnumber>
        <serialnumber>1216300503088</serialnumber>
        <GUID>4D6059D05BEA5745061D7D0B811E7CC</GUID>
      </scanner>
      <scanner type="USBIBMHID">
        <scannerID>3</scannerID>
        <modelnumber>DS6708-SR20007ZZR</modelnumber>
        <serialnumber>2216300503022</serialnumber>
        <GUID>556059D05BEA5745061D7D0B811E755</GUID>
      </scanner>
      <scanner type="SNAPI">
        <scannerID>4</scannerID>
        <modelnumber>DS457-SR001R</modelnumber>
        <serialnumber>3316300503033</serialnumber>
        <GUID>666059D05BEA5745061D7D0B811E766</GUID>
      </scanner>
    </scanners>
    <status>1</status>
  </arg-xml>
</outArgs>

1. 查詢所有“USBIBMHID”的Scanner的數量。

int number = XElement.Parse(outXml).XPathSelectElements("//scanner[@type = 'USBIBMHID']").Count();

2. 查詢 type 為 “SNAPI"的Scanner的ID。 (即查找結點scanner的子結點scannerID的Inner Text)

            XDocument xDoc = XDocument.Load("XMLFile1.xml");
            var scanners = xDoc.Descendants("scanner").Where(node => node.Attribute("type").Value == "USBIBMHID").FirstOrDefault();

            List<string> idValues = new List<string>();
            if (scanners != null)
            {
                idValues.Add(scanners.Descendants("scannerID").Single().Value);
            }

 

實際應用中,使用XML序列化來解析XML並運用的程序中是一個比較方便的方法。

使用XML序列化可以直接把Data 映射到對應的類上,從而在程序中使用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM