我需要在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,但没有成功,所以这样做。
有人可以查看提供的代码并告诉我我做错了什么吗?
谢谢你, 安德鲁
答案 0 :(得分:1)
鉴于正确的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;
答案 1 :(得分:1)
您的问题是属性位于字段而非字段下。这是一个应该起作用的样本
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);
答案 2 :(得分:0)
使用后代
XDocument doc = XDocument.Load(FILENAME);
List<XElement> hodnota = doc.Descendants("field").Where(el => el.Attribute("name").Value == "SUPPLIER_NAME").ToList();