【问题标题】:How to parse xml file with System.Xml.Linq如何使用 System.Xml.Linq 解析 xml 文件
【发布时间】:2014-09-07 05:06:43
【问题描述】:

我有一些数据存储在使用此http://www.codeproject.com/Tips/725375/Tiny-XML-Serialization-for-Cplusplus xml 序列化程序序列化的 xml 文件中。所以我的 Xml 文件看起来像:

类型 1:

<SerializableClass Type="ApplicationSettings" Version="2.1">
<Member Name="Setting1">Settings string 1</Member>
<Member Name="Setting2">Settings string 2</Member>
<Member Name="Setting3">Settings string 3</Member>
<Member Name="Setting4">1234</Member>
<Member Name="Setting5">5678</Member>
<Member Name="Setting6">false</Member>
<Member Name="Setting7">true</Member>
<Class Name="Login" Type="DatabaseLogin" Version="1">
    <Member Name="HostName">my.db.Settings.server.local</Member>
    <Member Name="Port">2000</Member>
    <Member Name="User">john.smith</Member>
    <Member Name="Password">newPassword</Member>
</Class>
<Collection Name="LastUsedDocuments">
    <Class Type="LastUsedDocument" Version="1">
        <Member Name="Name">Document #1</Member>
        <Member Name="Path">c:\temp\</Member>
        <Member Name="Size"></Member>
    </Class>
    <Class Type="LastUsedDocument" Version="1">
        <Member Name="Name">Document #2</Member>
        <Member Name="Path">c:\temp\</Member>
        <Member Name="Size"></Member>
    </Class>
    <Class Type="LastUsedDocument" Version="1">
        <Member Name="Name">Document #3</Member>
        <Member Name="Path">c:\temp\</Member>
        <Member Name="Size"></Member>
    </Class>
    <Class Type="LastUsedDocument" Version="1">
        <Member Name="Name">Document #4</Member>
        <Member Name="Path">c:\temp\</Member>
        <Member Name="Size"></Member>
    </Class>
    <Class Type="LastUsedDocument" Version="1">
        <Member Name="Name">Document #5</Member>
        <Member Name="Path">c:\temp\</Member>
        <Member Name="Size"></Member>
    </Class>
</Collection>

现在我想使用 System.xml.linq 工具解析此类 xml 文件,但我发现这并不容易,因为我需要检查每个“名称”属性以找出对象的类型。

我更容易阅读这种类型的 xml: 类型 2:

    <LastUsedDocuments>
    <LastUsedDocument>
        <Name>Document #1</Name>
        <Path>c:\temp\</Path>
        <Size></Size>
    </LastUsedDocument>
    <LastUsedDocument>
        <Name>Document #1</Name>
        <Path>c:\temp\</Path>
        <Size></Size>
    </LastUsedDocument>     
</LastUsedDocuments>

但是我无法重写所有的 xml 文件,所以我正在寻找一种方法来像读取这种类型 2 xml 一样容易地读取这种类型 1 的 xml 文件

您能帮我如何使用 system.xml.linq 吗?

【问题讨论】:

    标签: c# .net xml linq xml-parsing


    【解决方案1】:

    我的首选方法是这样的:

    using (MemoryStream ms = new MemoryStream(xmlByteBuffer))
    {
      XElement root = XElement.Load(ms);
    
      IEnumerable<XElement> res =
          from el in root.Elements("Member")
          where (string)el.Attribute("Name") == "Setting1"
          select el;
    }
    

    编辑:您的 XML 似乎不正确。您的起始标签是“SerializableClass”,结束标签是“Collection”。您可能需要调整搜索,以便通过“集合”XElement 进行查询。 XElement child1 = root.Element("Collection");

    【讨论】:

    • 对不起,我没有正确(完全)复制它。非常感谢它的工作
    猜你喜欢
    • 2015-06-24
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多