2015-11-18 148 views
0

我很新的XML和LINQ。 我有一個XLM文件是這樣的:Vb.net LINQ查詢XML數據

<?xml version="1.0" encoding="utf-8"?> 
<Headers xmlns="http://tempuri.org/GridLayerSchema.xsd"> 
<Header> 
    <Name>Layer0</Name> 
    <Fields FieldID="FieldID0" FieldName="FieldNameAll" FieldPosition="0"FieldPositionStart="0" FieldLenght="254" FieldEnable="true" /> 
</Header> 
<Header> 
    <Name>Layer1</Name> 
    <Fields FieldID="FieldID0" FieldName="JetPosition" FieldPosition="0" FieldPositionStart="0" FieldLenght="14" FieldEnable="true" /> 
    <Fields FieldID="FieldID1" FieldName="Owner" FieldPosition="1" FieldPositionStart="14" FieldLenght="14" FieldEnable="true" /> 
    <Fields FieldID="FieldID2" FieldName="Item" FieldPosition="2" FieldPositionStart="28" FieldLenght="3" FieldEnable="true" /> 
</Header> 
</Headers>​ 

我需要探討兩個方面的文件。

  • 首先我需要carge的組合框的ItemSource屬性與Header.name
  • 二我需要做一個DataGrid標題與選擇層的fiels。

我已經做了一個linq查詢採取名稱屬性,但dosn't工作。

Dim xdoc As XDocument = XDocument.Load(My.Application.Info.DirectoryPath & "\Layers\Layers.xml") 

    Dim query = From el In xdoc...<Headers> 
       Select New Header With {.Name = [email protected]} 
    For Each e In query 
     HeadersCollection.Add(e) 
    Next 
+0

我沒有錯誤,只是我沒有結果。我希望能夠在「e」中找到XML中Header的名稱,但查詢不會有任何結果。 –

回答

0

您必須包含XML的名稱空間,並且您可以找到所有的Header元素。這會給你正確的結果: -

Dim ns As XNamespace = "http://tempuri.org/GridLayerSchema.xsd" 
Dim query = From e1 In xdoc.Root.Elements(ns + "Header") 
        Select New With {.Name = e1.Element(ns + "Name").Value} 
+1

太棒了!完美的工作。 –