私は、SAXON Javaを使用してsubstring-after()を使用するXPath式を評価しています。複数のテキストノードを単一のものに変換するXPath関数
A sequence of more than one item is not allowed as the first argument of substring-after().
単一一つに複数のテキスト・ノードを変換する任意のXPath関数があります:この関数は、時に私にいくつかのDOMに対して実行次のエラーを与えますか?ここで私はテスト違うのXPathです:
1. substring-after(normalize-space(//*[@id='PrintArea']//div/p[1]//span/font), ':')
2. substring-after(normalize-space(//*[@id='PrintArea']//div/p[1]//span/font[1]), ':')
3. substring-after(//*[@id='PrintArea']//div/p[1]//span/font/text(), ':')
4. substring-after(//*[@id='PrintArea']//div/p[1]//span/font[1]/text(), ':')
5. substring-after(//*[@id='PrintArea']//div/p[1]//span/font/text()[position()=1], ':')
5. substring-after(//*[@id='PrintArea']//div/p[1]//span/font[1]/text()[position()=1], ':')
私もFirebugののFirePathが正常に上記のすべてを評価することを追加する必要があります。
答えをありがとう。あなたの最初の解決策(全体のXPathをカッコで囲む)は、text()を使わなくても気をつけました(substring-afterは結果をテキストに暗黙にキャストしているようです)。なぜ、/ a/b/c [1]は動作しません(/ a/b/c)[1]?違いはありますか? – Mohsen
substring-afterは文字列を返します。文字列はテキストノードと全く同じではありません。/a/b/c [1]は/ a/b /(c [1])を意味し、各/ a/bノードの最初のc子を返します。 –