4

デフォルトの名前空間を含む以下の XML があります

<?xml version="1.0"?>
<catalog xmlns="http://www.edankert.com/examples/">
  <cd>
    <artist>Stoat</artist>
    <title>Future come and get me</title>
  </cd>
  <cd>
    <artist>Sufjan Stevens</artist>
    <title>Illinois</title>
  </cd>
  <cd>
    <artist>The White Stripes</artist>
    <title>Get behind me satan</title>
  </cd>
</catalog>

そして、何らかの結果が返されることを期待して、次のコードを実行しています

Element rootElem = new Builder().build(xml).getRootElement();
xc = XPathContext.makeNamespaceContext(rootElem);
xc.addNamespace("", "http://www.edankert.com/examples/");   
Nodes matchedNodes = rootElem.query("cd/artist", xc);
System.out.println(matchedNodes.size());

ただし、サイズは常に 0 です。

通った

どんな助けも楽しみにしています。

4

1 に答える 1

4

XPath の接頭辞のない名前は、常に「名前空間がない」ことを意味します。デフォルトの名前空間宣言を尊重しません。プレフィックスを使用する必要があります

Element rootElem = new Builder().build(xml).getRootElement();
xc = XPathContext.makeNamespaceContext(rootElem);
xc.addNamespace("ex", "http://www.edankert.com/examples/");   
Nodes matchedNodes = rootElem.query("ex:cd/ex:artist", xc);
System.out.println(matchedNodes.size());

xmlnsXPath 名前空間コンテキストでプレフィックスにバインドされている名前空間 URI が、ドキュメントでバインドされている URI と同じである限り、XPath 式が元のドキュメントでは使用しなかったプレフィックスを使用してもかまいません。.

于 2013-01-15T11:27:47.653 に答える