3

例えば:

Set objXML = CreateObject("Microsoft.XMLDOM")

objXML.async = False
objXML.validateOnParse = False
objXML.resolveExternals = False
objXML.load("http://www.w3schools.com/dom/books.xml")

'objXML.setProperty "SelectionLanguage", "XPath"

For Each x In objXML.selectNodes("//book[@category='cooking' and @category='children']")
    WScript.Echo x.text
Next

For Each y In objXML.selectNodes("//book[position()<3]")
    WScript.Echo y.text
Next

がコメント化されている場合objXML.setProperty "SelectionLanguage", "XPath"、最初の xpath 式 (x オブジェクト) は有効に返されますが、2 番目の xpath 式 (y オブジェクト) でエラーが発生します。

msxml3.dll (14, 1) : Unknown method.

//book[-->position()<--<3]

コメントを外すとobjXML.setProperty "SelectionLanguage", "XPath"、両方の式が機能します。

私の質問は、XPath プロパティを明示的に設定する必要がある場合、またはこのプロパティを設定せずにどのような式を実行するかです。

4

1 に答える 1

4

古いバージョンのMSXMLのデフォルト言語はXPathではありません。
古い「バージョンに依存しないProgID」を使用してDomDocumentインスタンスを作成しました。Microsoft.XMLDOM独立したProgIDをサポートしたMSXMLの最後のバージョンとしてMSXML3.0(お持ちの場合)に対応します。
次のようにデフォルトの選択言語を決定できます。

WScript.Echo objXML.getProperty("SelectionLanguage")

XSLPattern選択言語が。のようなメソッドをサポートしていないreturnである必要がありposition()ます。
XPathはMSXML4.0以降のデフォルトの選択言語であるため、XPathを適切に使用するには2つの選択肢があります。

  1. 選択言語をXPathとして指定する古いバージョンを使用します。
  2. 選択言語を指定せずに新しい(古いものではない?)バージョンを使用する

XSLパターンとXPathの違いを説明する10代の頃のようなにおいがする古代の記事から。

MSXML 2.0は、 XPath1.0の前身であるXSLパターンのサポートを提供します 。XMLアドレス指定言語の概念は、元のW3C XSLワーキングドラフト(http://www.w3.org/TR/1998/WD-xsl-19981216.html)に導入され、XSLパターンと呼ばれていました。MSXML 2.0は、いくつかのマイナーな例外を除いて、元のXSL仕様で説明されているXSLパターン言語を実装します

だから、あなたはマイナーな(!)例外にあったと思います。

于 2012-07-13T01:42:54.373 に答える