Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.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
在.net中使用名称空间检索xml中的节点_.net_Vb.net_Xpath - Fatal编程技术网

在.net中使用名称空间检索xml中的节点

在.net中使用名称空间检索xml中的节点,.net,vb.net,xpath,.net,Vb.net,Xpath,我来自vb6的背景。net和xml的新特性。我正在尝试从xml文件检索节点。我发现使用了几种方法(xmltextreader/serialization、xmldocument、xpath),我之所以使用xpath是因为我首先得到了一些结果:)我的问题肯定与命名空间有关,但我发现的所有示例都比我使用的xml简单得多。这里是我需要访问的xml的一部分和我的代码片段 <?xml version="1.0" encoding="utf-8"?> <MTConnectStreams x

我来自vb6的背景。net和xml的新特性。我正在尝试从xml文件检索节点。我发现使用了几种方法(xmltextreader/serialization、xmldocument、xpath),我之所以使用xpath是因为我首先得到了一些结果:)我的问题肯定与命名空间有关,但我发现的所有示例都比我使用的xml简单得多。这里是我需要访问的xml的一部分和我的代码片段

<?xml version="1.0" encoding="utf-8"?>
<MTConnectStreams xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mtconnect.org:MTConnectStreams:1.2 http://mtconnect.org/schemas/MTConnectStreams_1.2.xsd" xmlns="urn:mtconnect.org:MTConnectStreams:1.2">
  <Header creationTime="2012-11-29T12:30:19Z" instanceId="2" nextSequence="1918272" sender="Tarus MTConnect Instance" bufferSize="5000" firstSequence="1913272" lastSequence="1918271" version="1.2" />
  <Streams>
    <DeviceStream name="Vertical Bridge" uuid="TPIVB1">
      <ComponentStream component="Device" name="Vert" componentId="TPIVert">
        <Events>
          <Availability dataItemId="avail" timestamp="2012-11-27T23:19:40Z" sequence="44">AVAILABLE</Availability>
        </Events>
      </ComponentStream>
      <ComponentStream component="Linear" name="X" componentId="X">
        <Samples>
          <AxisFeedrate dataItemId="xs1" timestamp="2012-11-29T12:29:54Z" sequence="1717806" name="x_feed_cmd" subType="COMMANDED" units="MILLIMETER/SECOND">0</AxisFeedrate>
如果我将根节点更改为简单的“MTConnectStreams”,那么一切都可以工作。下面是联机命名空间示例,我对代码做了以下更改。但在恢复原始根节点时,我仍然得到零结果

Dim nsMgr = New XmlNamespaceManager(xNav.NameTable)
nsMgr.AddNamespace("ns", "http://www.w3.org/2001/XMLSchema-instance")
Dim xIt As XPathNodeIterator = xNav.Select("//ns:AxisFeedrate", nsMgr)

有人能帮我克服这个障碍吗?

您的根节点声明默认名称空间为“urn:mtconnect.org:MTConnectStreams:1.2”,因此您需要使用它:

Dim nsMgr = New XmlNamespaceManager(xNav.NameTable)
nsMgr.AddNamespace("mt", "urn:mtconnect.org:MTConnectStreams:1.2")
Dim xIt As XPathNodeIterator = xNav.Select("//mt:AxisFeedrate", nsMgr)

您的根节点声明默认名称空间为“urn:mtconnect.org:MTConnectStreams:1.2”,因此您需要使用该名称空间:

Dim nsMgr = New XmlNamespaceManager(xNav.NameTable)
nsMgr.AddNamespace("mt", "urn:mtconnect.org:MTConnectStreams:1.2")
Dim xIt As XPathNodeIterator = xNav.Select("//mt:AxisFeedrate", nsMgr)

非常感谢。很抱歉迟了答复。我不是没有收到你的回复,就是被垃圾邮件过滤掉了。这起作用了。所以xmlns=默认名称空间,xmlns:xsi(或:随便什么)是额外的名称空间。在XML中,可以使用默认名称空间在某个名称空间中包含元素,而不使用前缀,但在XPath中,没有前缀总是意味着没有名称空间,因此要访问某个名称空间中的元素,XPath必须使用前缀,即使XML本身没有前缀。谢谢。很抱歉迟了答复。我不是没有收到你的回复,就是被垃圾邮件过滤掉了。这起作用了。所以xmlns=默认名称空间,xmlns:xsi(或:随便什么)是额外的名称空间。在XML中,可以使用默认名称空间在特定名称空间中包含元素,而不使用前缀,但在XPath中,没有前缀总是意味着没有名称空间,因此要访问特定名称空间中的元素,XPath必须使用前缀,即使XML本身没有前缀。