使用LINQ解析XML字符串

时间:2015-11-19 09:03:12

标签: c# xml-parsing

我只是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>

2 个答案:

答案 0 :(得分:0)

可以这样做一个相当简单的方法,假设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不能保证每个{具有此架构{ {1}}元素。

答案 1 :(得分:0)

您可以通过我通常使用http://xmltocsharp.azurewebsites.net/(或使用Visual Studio函数XML到CS(https://msdn.microsoft.com/en-us/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/en-us/library/tz8csy73(v=vs.110).aspx

string path =要加载的文件的路径。    T是输出对象