c#中对XML的LINQ查询
本文关键字:LINQ 查询 XML 中对 | 更新日期: 2023-09-27 18:17:09
我需要在c#中从xml中挑选数据。xml的结构如下:
<?xml version="1.0"?>
<xdoc version=""...>
<something>
...
</something>
<fields>
<field dimensions="" name="something else">
<ff>x</ff>
<text>something</text>
<gg>x</gg>
</field>
<field dimensions="" name="SUPPLIER_NAME">
<ff>x</ff>
<text>This is what I want</text>
<gg>x</gg>
</field>
<field dimensions="" name="something else2">
<ff>x</ff>
<text>something2</text>
<gg>x</gg>
</field>
</fields>
<something2>
...
</something2>
</xdc>
查询代码如下:
XElement root = XElement.Load(path);
IEnumerable<XElement> hodnota = from el in root.Elements("fields")
where (string)el.Attribute("name") == "SUPPLIER_NAME"
select el;
foreach (XElement in hodnota)
textBox1.Text += (string)el.Atribute("text") + Environment.NewLine;
目标是从属性名称为"SUPPLIER_NAME"的元素中选择文本"这是我想要的"。然后把它发送到excel,这部分工作完美无缺,但我找不到正确的表达,所以我写到文本框更快的测试。我试着从xml中挑选字符串,但是没有成功,所以我用这种方式搜索。
有人可以看看提供的代码,告诉我我做错了什么?
谢谢你,安德鲁。
给定正确的XML结构,就会得到我想要的结果。
string content = File.ReadAllText(@"C:'YourFolder'Yourfile.xml");
XDocument xDoc = XDocument.Parse(content);
var supplierNameField = xDoc.Descendants("field").First(d => d.Attribute("name").Value == "SUPPLIER_NAME");
var text = supplierNameField.Element("text").Value;
您的问题是属性在字段而不是字段下。下面是一个应该可以工作的示例
IEnumerable<XElement> hodnota = from el in root.Elements("fields").Elements("field")
where (string)el.Attribute("name") == "SUPPLIER_NAME"
select el;
foreach (XElement el in hodnota)
Console.WriteLine(el.Element("text").Value);
还是
IEnumerable<string> hodnota = from el in root.Elements("fields").Elements("field")
where (string)el.Attribute("name") == "SUPPLIER_NAME"
select el.Element("text").Value;
foreach (string el in hodnota)
Console.WriteLine(el);
使用子类
XDocument doc = XDocument.Load(FILENAME);
List<XElement> hodnota = doc.Descendants("field").Where(el => el.Attribute("name").Value == "SUPPLIER_NAME").ToList();