1

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

AxisFeedrate を取得しようとすると、次のようになります。

Dim xDoc As XPathDocument = New XPathDocument(sUrl)
Dim xNav As XPathNavigator = xDoc.CreateNavigator
Dim xIt As XPathNodeIterator = xNav.Select("//AxisFeedrate")
Dim i As Integer

For i = 1 To xIt.Count
    xIt.MoveNext()
    msgbox (xIt.Current.Value)

ルート ノードを単純に「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)

誰かがこのハードルを乗り越えるのを手伝ってくれますか?

4

1 に答える 1

1

ルート ノードは、デフォルトの名前空間が「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)
于 2013-01-10T17:16:28.503 に答える