问题是如果节点包含名称空间/属性,我将无法获得任何结果。这是代码:
Dim xmlFromDisk = XDocument.Load("customers.xml")
Dim ukCustomers = <ukCustomers>
<%= From cust In xmlFromDisk...<Customer> _
Where cust.<Country>.Value = "UK" _
Select cust %>
</ukCustomers>
当我有以下customers.xml时,查询有效:
<?xml version="1.0" encoding="utf-8"?>
<Customers>
<Customer>
<CustomerID>ALFKI</CustomerID>
<CompanyName>Alfreds Futterkiste</CompanyName>
<Country>UK</Country>
</Customer>
</Customers>
如果我有以下customers.xml,则查询无效:
<?xml version="1.0" encoding="utf-8"?>
<Customers xmlns="http://tempuri.org/">
<Customer>
<CustomerID>ALFKI</CustomerID>
<CompanyName>Alfreds Futterkiste</CompanyName>
<Country>UK</Country>
</Customer>
</Customers>
唯一的区别是Customers元素中的命名空间xmlns =“http://tempuri.org/”。
答案 0 :(得分:1)
当然,您还需要指定命名空间。 xmlns="..."
表示任何不合格的后代元素的默认命名空间。
我不知道你在VB中的XML文字中是怎么做的,但是在C#中你只是写:
XNamespace ns = "http://tempuri.org/";
var ukCustomers = doc.Root
.Elements(ns + "Customer")
.Where(x => (string) x.Element(ns + "Country") == "UK");
编辑:这是Reflector所显示的等效VB代码,我被黑客攻击了一下:
Dim ns As XNamespace = "http://tempuri.org/"
Dim ukCustomers =
(From x In doc.Root.Elements(DirectCast((ns + "Customer"), XName))
Where (CStr(x.Element(ns + "Country")) = "UK")
Select x)