2011-12-22 63 views
0

我一直在嘗試使用VB.NET讀取XML文件,並在一些(請參閱2-3小時)使用Google搜索和閱讀我已經在某種程度上正確的方向現在我停下來,我找不到任何對我有意義的答案。在VB.NET中讀取XElement的childelement

這是XML我:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<exportCustomerInformation xmlns="http://www.testdom.se/server/services/exportCustomerInformationNavision" xmlns:met="http://www.testdom.se/server/services/metadata" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <data> 
     <customers> 
      <customerInformation xmlns:nav="http://www.testdom.se/server/services/integration/navision"> 
       <nav:littera/> 
       <nav:parentUuid/> 
       <nav:name>TESTBEDRIFTEN AS</nav:name> 
       <nav:uuid>77cf992e-766a-4496-9a5a-5105a75214ce</nav:uuid> 
       <nav:customerType>1</nav:customerType> 
       <nav:emailAddress/> 
       <nav:industryBranch/> 
       <nav:department>TRONDHEIM</nav:department> 
       <nav:invoicingAddress> 
        <nav:streetName>PO BOX 123</nav:streetName> 
        <nav:streetNumber/> 
        <nav:recipient/> 
        <nav:postalCode>7407</nav:postalCode> 
        <nav:city>TRONDHEIM</nav:city> 
        <nav:country>NORWAY</nav:country> 
       </nav:invoicingAddress> 
       <nav:deliveryAddress> 
        <nav:placeName>TESTBEDRIFTEN AS</nav:placeName> 
       <nav:streetName>STORGATEN</nav:streetName> 
        <nav:streetNumber>1</nav:streetNumber> 
        <nav:recipient/> 
        <nav:postalCode>7011</nav:postalCode> 
        <nav:city>TRONDHEIM</nav:city> 
        <nav:country>NORWAY</nav:country> 
       </nav:deliveryAddress> 
      </customerInformation> 
     </customers> 
    </data> 
</exportCustomerInformation> 

爲了閱讀,我有以下代碼:

Dim xmlDoc = XDocument.Load(file) 
    For Each dataXML As XElement In xmlDoc...<customerInformation> 

     oDR = oDT.NewRow 
     oDR("parentUuid") = dataXML...<nav:parentUuid>.Value 
     oDR("name") = dataXML...<nav:name>.Value 
     oDR("uuid") = dataXML...<nav:uuid>.Value 
     oDR("customerType") = dataXML...<nav:customerType>.Value 
     oDR("emailAddress") = dataXML...<nav:emailAddress>.Value 

     'What to here in order to get to these children? 
     oDR("invStreetName") = dataXML.<nav:invoicingAddress>.<nav:invStreetName>.Value 
     oDR("invStreetNumber") = dataXML.<nav:invoicingAddress>...<nav:invStreetNumber>.Value 
     oDR("invName") = dataXML.<nav:invoicingAddress>...<nav:invName>.Value 
     oDR("invPostalCode") = dataXML.<nav:invoicingAddress>...<nav:invPostalCode>.Value 
     oDR("invCity") = dataXML.<nav:invoicingAddress>...<nav:invCity>.Value 
     oDR("invCountry") = dataXML.<nav:invoicingAddress>...<nav:invCountry>.Value 

    Next 

所以,我的問題。我怎樣才能訪問節點<invoicingAddress>?

我上面提供的代碼並沒有太大的好處。 :P

任何幫助深表感謝。

// Jaggen

+0

我想我想通了。 可能不是最優雅的解決方案,但在這種特殊情況下,它運行良好。 :) oDR(「delPlaceName」)= dataXML ... .Descendants.ElementAt(0).Value Descendants.ElementAt([n])使所有區別。 :) // Jaggen – Jaggernauten 2011-12-22 15:08:48

回答

0

這裏是做這件事的一個醜陋的例子,假設doc包含的XDocument:

Dim customerInfo = doc.Root.Elements.First.Elements.First.Elements.First 

Dim invoicingAddress = _ 
customerInfo.Elements.First(Function(x) x.Name.LocalName = "invoicingAddress") 

Dim streetName = _ 
invoicingAddress.Elements.First(Function(x) x.Name.LocalName = "streetName").Value 
+0

謝謝。奇蹟般有效。 :) – Jaggernauten 2012-02-27 08:57:21