4

次のサンプル データで XOM を使用しています。

Element root = cleanDoc.getRootElement();
//find all the bold elements, as those mark institution and clinic.
Nodes nodes = root.query("//*");

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:html="http://www.w3.org/1999/xhtml">
    <head>
        <title>Patient Information</title>
    </head>
</html>

次の要素は、(実際のデータから) 多くの要素を返します。

//*

しかし、何かのような

//head

何も返しません。ルートの子を実行すると、番号が一致しているように見え、要素名を出力すると、すべてが正しく見えます。

HTML を取得し、tagsoup で解析して、結果の文字列から XOM ドキュメントを作成しています。これのどの部分がひどく間違っているのでしょうか? ここで奇妙なエンコーディングの問題が発生しているように感じますが、私はそれを見ていません。Java Strings は文字列ですよね?

4

1 に答える 1

6

ドキュメントにはデフォルトの名前空間があります。つまり、XPath モデルではすべての要素がその名前空間にあります。

クエリは//html:head. 名前空間のマッピングを XPath クエリに提供する必要があります。

XPath 式は名前空間プレフィックスを使用しますが、一致する必要があるのは名前空間 uri であることに注意してください。

XPathContext ctx = new XPathContext("html", "http://www.w3.org/1999/xhtml");
Nodes nodes = root.query("//html:head", ctx );
于 2010-02-24T02:07:09.673 に答える