我有一个类似于以下内容的xml文件:
<doc>
<file>
<header>
<source>
RNG
</source>
</header>
<body>
<item name="items.names.id1">
<property>propertyvalue1</property>
</item>
<!-- etc -->
<item name="items.names.id100">
<property>propertyvalue100</property>
</item>
<!-- etc -->
<item name="otheritems.names.id100">
<property>propertyvalue100</property>
</item>
</body>
</file>
</doc>
以下课程:
private class Item
{
public string Id;
public string Property;
}
例如,该文件有100个项目条目(在name属性中标记为1到100)。如何使用Linq Xml来获取这些节点并将它们放在项目列表中?
使用Selman22的例子,我正在做以下事情:
var myList = xDoc.Descendants("item")
.Where(x => x.Attributes("name").ToString().StartsWith("items.names.id"))
.Select(item => new Item
{
Id = (string)item.Attribute("name"),
Name = (string)item.Element("property")
}).ToList();
但是,列表为空。我在这里缺少什么?
答案 0 :(得分:0)
您可以使用LinqToXml直接查询XML,或者反序列化它并使用LINQ来对象。如果您选择反序列化,我建议从模式开始,并使用xsd.exe生成表示数据模型的类。如果您没有xml的架构,即使 xsd.exe 也可以从示例xml文件中推断出一个,但您可能需要对结果进行微调。
答案 1 :(得分:0)
试试这个XElement root = XElement.Parse("your file name");
var items textSegs =(from item in root.Descendants("item")
select item).ToList();
现在迭代列表并存储它
答案 2 :(得分:0)
使用LINQ to XML:
XDocument xDoc = XDocument.Load(filepath);
var myList = xDoc.Descendants("item").Select(item => new Item {
Id = (string)item.Attribute("name"),
Property = (string)item.Element("property")
}).ToList();
答案 3 :(得分:0)
以下是使用Xdocument从xml获取信息的方法。
string input = "<Your xml>";
Xdocument doc = XDocument.Parse(input);
var data = doc.Descendants("item");
List<Items> itemsList = new List<Items>();
foreach(var item in data)
{
string itemname= item.Element("item").Value;
string property = item.Element("property").Value;
itemsList.Add(new item(itemname, property));
}
答案 4 :(得分:0)
我猜你想要给出你的问题是如何表达的代码..我也假设真正的XML也非常简单。
var items = from item in doc.Descendants("item")
select new Item()
{
Id = item.Attributes("name").First().Value,
Property = item.Elements().First().Value,
};
确保将xml加载到doc中。您可以通过两种方式加载xml:
// By a string with xml
var doc = XDocument.Parse(aStringWithXml);
// or by loading from uri (file)
var doc = XDocuemnt.Load(aStringWhichIsAFile);