2011-12-22 61 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