2011-07-28 6 views
1

ノードに名前空間/属性が含まれていると結果が得られないという問題があります。これはコードです:XDocumentを照会するエレメント/ルートが名前空間を属性として持っているときに照会が機能しない

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/"という名前空間です。

答えて

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"); 

EDIT:リフレクターによって示されるように、これは同等の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) 
+0

あなたは私にvb.netバージョンを送ってください。なぜ私はそれを変換することはできませんがわからない。ありがとうございました。 – Paul

+0

@Paul:今は、恐れています。 C#としてコンパイルして、リフレクタを実行することはできますか? –

+0

私のプロジェクトはVB.NETにあり、Reflectorは一度も使用していません。時間があるときは、VB.NETのLINQ Queryのみを投稿してください。ありがとうございました。 – Paul

関連する問題