VB.net

2016-09-20 14 views
1

を使用してXMLタグを読み取るための正しいパスをフォーマット私は、次のコード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> 

私の問題を読みしようとしています実際にトランザクションノードに到達して、SiteID、TankID、およびTankNumberを読み取るために、このコードセクションを適切にフォーマットする方法(具体的には、タグパスのSyncData部分)を知りませんか。

XMLファイルのSyncDataノードで余分なデータ(xmlns = "http://tempuri.org/SyncData.xsd")を手作業で削除し、そのパスをVBコードでそのまま使用すると、余分なデータをXMLに戻すと、データが見つからなくなります。

ご協力いただければ幸いです。

答えて

0

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 
+0

コードでも同じ結果が編集されました...エラーは発生しませんが、データはメッセージボックスにも入力されません。私は、ライン4のnsmgr.AddNamespace( "sd"、 "http://tempuri.org/SyncData.xsd")にxmlns =が含まれていないことに気付きました。元のXMLに含まれていました...結果。 –

+0

奇妙なことに、私はあなたのサンプルデータでこのコードを実行していて、うまくいきました。確かに、 '.Load'の代わりに' .LoadXml'を使用して、文字列を直接追加することはできましたが、それは変更されません。コードをコピー/ペーストしましたか?確かに正しく適用されていますか? – FloatingKiwi

+0

私のバッド.....私は再び見て、間違ったXMLファイル名を指していた。私はそれにXLMNSと1つのファイル名を持っていた。一度私は正しいファイルを指差し、それは魅力のように働いた。私にそれを手伝ってくれてありがとう。私は昨夜、Googleに答えようと時間を費やしました。非常に高く評価。 –