簡體   English   中英

使用VB.net格式化正確的路徑以讀取xml標記

[英]Formatting the correct path to read an xml tag using VB.net

我想使用以下代碼

Imports System.Xml

Public Class Form1

    Private Sub Convert_Button_Click(sender As Object, e As EventArgs) Handles  Convert_Button.Click
        Dim doc As New XmlDocument()
        doc.Load("C:\Test\Inventory.xml")
        Dim nodes As XmlNodeList = doc.DocumentElement.SelectNodes("/IXFleet/SyncData/Transaction")
        Dim product_id As String = "", product_name As String = "", product_price As String = ""
        For Each node As XmlNode In nodes
            product_id = node.SelectSingleNode("SiteID").InnerText
            product_name = node.SelectSingleNode("TankID").InnerText
            product_price = node.SelectSingleNode("TankNumber").InnerText
            MessageBox.Show(product_id & " " & product_name & " " & product_price)
        Next
    End Sub

End Class

我正在嘗試閱讀以下XML數據

<IXFleet>
  <SyncConfig xmlns="http://tempuri.org/SyncConfig.xsd"/>
  <SyncData xmlns="http://tempuri.org/SyncData.xsd">
    <Transaction>
     <SiteID>1</SiteID>
     <TankID>1</TankID>
     <TankNumber>1</TankNumber>
     </Transaction>
  </SyncData>
</IXFleet>

我的問題是我不知道如何正確格式化這部分代碼(特別是標記路徑的SyncData部分)實際到達Transaction節點,讀取SiteID,TankID和TankNumber

Dim nodes As XmlNodeList = doc.DocumentElement.SelectNodes("/IXFleet/SyncData/Transaction")

如果我手動刪除XML文件,SyncData節點中的額外數據(xmlns =“http://tempuri.org/SyncData.xsd”),並使用VB代碼中的路徑,它可以工作,放入額外的數據回到XML,它失敗了,根本找不到任何數據。

任何幫助肯定會受到贊賞。

你需要一個NamespaceManager 然后使用名稱空間前綴執行所有查詢並傳入管理器。

    Dim doc As New XmlDocument()
    doc.Load("C:\Test\Inventory.xml")
    Dim nsmgr = New XmlNamespaceManager(doc.NameTable)
    nsmgr.AddNamespace("sd", "http://tempuri.org/SyncData.xsd")
    Dim nodes As XmlNodeList = doc.DocumentElement.SelectNodes("/IXFleet/sd:SyncData/sd:Transaction", nsmgr)
    Dim product_id As String = "", product_name As String = "", product_price As String = ""
    For Each node As XmlNode In nodes
        product_id = node.SelectSingleNode("sd:SiteID", nsmgr).InnerText
        product_name = node.SelectSingleNode("sd:TankID", nsmgr).InnerText
        product_price = node.SelectSingleNode("sd:TankNumber", nsmgr).InnerText
        MessageBox.Show(product_id & " " & product_name & " " & product_price)
    Next

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM