2016-09-20 4 views
1

나는 다음과 같은 코드를는 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 

를 사용하려고 내가

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

내 문제는 다음과 같은 XML 데이터를 읽기 위해 노력하고 있습니다를 사용하여 XML 태그를 읽을 수있는 올바른 경로를 포맷 나는이 코드 섹션을 올바르게 포맷팅하는 방법을 알지 못한다. (구체적으로 태그 경로의 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로 가져 오면 실패하고 모든 데이터를 찾을 수 없습니다.

도움이 될만한 의견이 있습니다.

답변

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가있는 파일 이름 하나가없는 파일 이름이 하나 있습니다. 일단 내가 올바른 파일을 지적하면 그것은 매력처럼 작동했습니다. 그걸 도와 주셔서 고맙습니다. 지난 밤에 Google에 답하려고 노력하는 데 시간을 보냈습니다. 대단히 감사합니다. –