Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用VB.net格式化读取xml标记的正确路径_Xml_Vb.net_Path - Fatal编程技术网

使用VB.net格式化读取xml标记的正确路径

使用VB.net格式化读取xml标记的正确路径,xml,vb.net,path,Xml,Vb.net,Path,我正在尝试使用以下代码 Imports System.Xml 公开课表格1 私有子转换按钮\u单击(发件人作为对象,e作为事件参数)处理转换按钮。单击 Dim doc作为新的XmlDocument() doc.Load(“C:\Test\Inventory.xml”) 将节点调整为XmlNodeList=doc.DocumentElement.SelectNodes(“/IXFleet/SyncData/Transaction”) Dim product_id为String=“”、product

我正在尝试使用以下代码

Imports System.Xml
公开课表格1
私有子转换按钮\u单击(发件人作为对象,e作为事件参数)处理转换按钮。单击
Dim doc作为新的XmlDocument()
doc.Load(“C:\Test\Inventory.xml”)
将节点调整为XmlNodeList=doc.DocumentElement.SelectNodes(“/IXFleet/SyncData/Transaction”)
Dim product_id为String=“”、product_name为String=“”、product_price为String=“”
将每个节点作为节点中的XmlNode
product_id=node。选择SingleNode(“SiteID”)。InnerText
产品名称=节点。选择SingleNode(“TankID”)。InnerText
产品价格=节点。选择SingleNode(“罐号”)。InnerText
MessageBox.Show(产品标识和产品名称和产品价格)
下一个
端接头
末级
我正在尝试读取以下XML数据


1.
1.
1.
我的问题是我不知道如何正确格式化这段代码(特别是标记路径的SyncData部分),以便实际访问事务节点,读取SiteID、TankID和TankNumber

Dim节点为XmlNodeList=doc.DocumentElement.SelectNodes(“/IXFleet/SyncData/Transaction”)
如果我手动删除额外的数据(xmlns=”http://tempuri.org/SyncData.xsd)在XML文件中,使用SyncData节点,并使用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

您需要一个
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

我按照您的代码所示进行了编辑,结果相同……没有生成错误,但也没有数据填充消息框。我注意到第4行nsmgr.AddNamespace(“sd”,”)没有包括原始XML中的xmlns=,我很累,但仍然没有结果。奇怪的是,我用你的样本数据运行了这段代码,并且它正常工作。我很钦佩地使用了
.LoadXml
而不是
.Load
,这样我可以直接添加字符串,但不会改变任何事情。你复制/粘贴了代码吗?Su它的应用是否正确?我的不好…..我再次查看,但我指向了错误的XML文件名。我有一个文件名,其中包含XLMNS,另一个没有。一旦我指向正确的文件,它就像一个符咒一样工作。非常感谢你在这方面的帮助。我昨晚花了几个小时试图用谷歌搜索答案。非常感谢。我编辑为sh在您的代码中拥有相同的结果…没有生成错误,但也没有数据填充消息框。我注意到第4行nsmgr.AddNamespace(“sd“,”)没有包含原始XML中的xmlns=。我尝试了包含这些内容,但仍然没有结果。奇怪的是,因为我使用您的示例数据运行了这段代码,并且它正常工作。令人钦佩的是,我使用了
.LoadXml
而不是
.Load
,这样我就可以直接添加字符串,但这不会改变任何事情。你复制/粘贴代码了吗?确定它被正确应用了吗?我的错…..我又看了一遍,发现我指向了错误的XML文件名。我有一个包含XLMNS的文件名,还有一个没有。一旦我指向正确的文件,它就像一个符咒。非常感谢你在这方面帮助我。昨晚我花了几个小时试图用谷歌搜索答案。非常感谢。