所以我正在尝试编写一个简单的查询,它从XML文件中获取所有特定属性,但似乎没有任何效果。我已经能够用其他几种XML来做到这一点,但由于某种原因,我在这里工作的那个只是不合作。任何建议或意见都将非常感激。
以下是XML的样子。
<Doc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="Name" xsi:schemaLocation="[there's a link here]" Name="Name">
<Wrapper>
<Box_Collection>
<Box name="Test A" test="Test B"/>
<Box name="Test C" test="Test D"/>
<Box name="Test E" test="Test F"/>
</Box_Collection>
</Wrapper>
</Doc>
这是我的C#代码:
XDocument customers = XDocument.Load(@"C:\Users\folder\file.xml");
IEnumerable<string> names =
from c in customers.Descendants("Box").Attributes("name")
select c.Value;
string nameList = "Names:";
foreach (string c in names)
{
namer += " " + c;
}
textBox.AppendText(nameList);
答案 0 :(得分:1)
原因是您的XML在根元素处声明了默认名称空间:
xmlns="Name"
默认情况下,XML元素继承祖先默认命名空间,除非另有指定(f.e使用指向不同命名空间URI的显式前缀)。您可以使用 XNamespace
+元素的本地名称指向命名空间中的元素:
XNamespace ns = "Name";
IEnumerable<string> names =
from c in customers.Descendants(ns+"Box").Attributes("name")
select c.Value;
答案 1 :(得分:0)
您的文档的默认名称空间为&#34;名称&#34;。在选择如下节点时需要引用命名空间:
IEnumerable<string> names =
from c in customers.Descendants(XName.Get("Box", "Name")).Attributes("name")
select c.Value;