我有一些数据存储在使用此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文件,我发现它并不那么容易,因为我需要检查每个&#34; Name&#34;属性以找出对象的类型。
我更容易阅读这种类型的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吗?
答案 0 :(得分:0)
我首选的方法是:
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”。您可能需要调整搜索,以便通过“Collection”XElement查询。 XElement child1 = root.Element("Collection");