簡體   English   中英

使用LINQ解析XML字符串

[英]Parse XML String Using LINQ

我對c#xml只是陌生的,所以我需要尋求幫助來解析某個xml電報。 基本上,我需要在每個節點中循環以獲取UID,ID和值,是否可以使用LINQ或任何其他方法來做到這一點?

<pre>
PROCESSDATA,ALSS_L01S01,10,20140721005835,<ProcessData tokens="14" cid="1234" uid_1="1234" result_1="P" uid_2="5655" result_2="P" uid_3="8487" result_3="P" uid_4="73695" result_4="P" uid_5="2365" result_5="P" uid_6="12584" result_6="P">
    <TestPlans>
        <TestPlan Name="FOO" Group="FOOFRGP">
            <TestRun Uid="1234" UidType="SN">
                <Test Id="INS" Value="270.50"/>
            </TestRun>
            <TestRun Uid="5655" UidType="SN">
                <Test Id="INS" Value="260.50"/>
            </TestRun>
            <TestRun Uid="8487" UidType="SN">
                <Test Id="INS" Value="260.50"/>
            </TestRun>
            <TestRun Uid="73695" UidType="SN">
                <Test Id="INS" Value="260.50"/>
            </TestRun>
            <TestRun Uid="2365" UidType="SN">
                <Test Id="INS" Value="260.50"/>
            </TestRun>
            <TestRun Uid="12584" UidType="PCB_SN">
                <Test Id="INS" Value="260.50"/>
            </TestRun>
        </TestPlan>
    </TestPlans>
</ProcessData>
</pre>

假設xmlString變量保存您在問題中發布的XML,則可以這樣簡化方法:

        var xDocument = XDocument.Parse(xmlString);

        var testRunElements = xDocument.Descendants("TestRun");

        foreach (var testRunElement in testRunElements)
        {
            var uid = testRunElement.Attribute("Uid").Value;
            var testElement = testRunElement.Element("Test");
            var id = testElement.Attribute("Id").Value;
            var value = testElement.Attribute("Value").Value;
        }

xDocument.Descendants選擇名為TestRun的元素。 然后,我們使用foreach遍歷每個元素,以從命名屬性中提取值。

為了安全起見,您可能希望在嘗試訪問任何屬性之前檢查元素和屬性是否不為null ,以防您的實際XML不保證每個TestRun元素都具有此架構。

您可以從中創建類,我通常使用http://xmltocsharp.azurewebsites.net/ (或使用Visual Studio Function XML到CS( https://msdn.microsoft.com/zh-cn/library/hh371548 ( v=vs .110).aspx )),則可以將該XML反序列化為對象

public static T Deserialize<T>(string path)
    {
        XmlSerializer ser = new XmlSerializer(typeof(T));
        object result;
        using (FileStream reader = File.Open(path, FileMode.Open))
        {
            result = ser.Deserialize(reader);
        }
        return (T)result;
    }

鏈接到序列化: https : //msdn.microsoft.com/zh-cn/library/tz8csy73(v=vs.110).aspx


字符串路徑=要加載的文件的路徑。 T是輸出對象

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM