1

以下に単純な xml ドキュメントがあります。

    <?xml version="1.0" encoding="utf-8"?>
<Research researchID="RT_a" language="eng" xmlns="http://www.rixml.org/2010/1/RIXML" createDateTime="2012-06-30T01:13:38Z">
  <Product productID="RT_a">
              <SecurityID idType="ISIN" idValue="US0605051046" />
  </Product>
</Research>

指定された XPath 文字列で属性「idValue」を読み取ろうとしています。この部分を削除しない限り、これは機能しません。

xmlns="http://www.rixml.org/2010/1/RIXML" 

私のコードは以下の通りです:

    Dim doc As XPathDocument = New XPathDocument("c:\test\test.xml")

    Dim strXPath As String = "/Research[1]/Product[1]/SecurityID[1]"
    Dim nav As XPathNavigator = doc.CreateNavigator()
    Dim mgr As New XmlNamespaceManager(nav.NameTable)

    mgr.AddNamespace("", "http://www.rixml.org/2010/1/RIXML")

    Dim XPathNode As XPathNavigator = nav.SelectSingleNode(strXPath, mgr)
    If XPathNode IsNot Nothing Then
        Console.WriteLine(XPathNode.GetAttribute("idValue", String.Empty))
    Else
        Console.WriteLine("Nothing found")
    End If

名前空間の追加に関する行は、結果に影響を与えません-それでいくつかのテストを行いました. 私は何をする必要がありますか/私は何を間違っていますか?

4

1 に答える 1

1

次のことを試してください。

Dim strXPath As String = "/x:Research[1]/x:Product[1]/x:SecurityID[1]/@idValue"
Dim nav As XPathNavigator = doc.CreateNavigator()
Dim mgr As New XmlNamespaceManager(nav.NameTable)

mgr.AddNamespace("x", "http://www.rixml.org/2010/1/RIXML")
nav.Evaluate("string(" + strXPath + ")", mgr)

ID値を返すか、属性が見つからない場合は空の文字列を返す必要があります。

問題はここにリストされているものである可能性があり、名前空間を明示的に参照する必要があるため(デフォルトの名前空間であっても)、「x:」を使用して修正します。

于 2012-08-13T07:20:47.567 に答える