xsltprocは名前で要素を選択しません

xslt
xsltprocは名前で要素を選択しません

XSLTスタイルシートを使用してXHTMLを変換しようとしていますが、基本的なスタイルシートを取得して何にも一致させることさえできません。 私は単純なものが足りないと確信しています。

これが私のXHTMLソースドキュメントです(大きな驚きはありません):

...

以下に示すように、実際の内容はそれほど重要ではありません。 ちなみに、 `tidy -asxml`で作成されたため、ドキュメントは整形式であると確信しています。

私のより複雑なXPath式は結果を返さなかったため、健全性テストとして、次のスタイルシートを使用して単純に変換しようとしています。

        ---[

            Found HTML element.

        ]---

変換は xsltproc --nonet stylesheet.xsl input.html`を介して行われ、出力は次のとおりです:" --- [] --- "(つまり、 html`の子要素が見つかりませんでした)。 ただし、「for-each」セクションを次のように変更すると、

次に、「— [html] —」が表示されます。 同様に、 `for-each select =” * / * “`を使用すると、予想どおり「— [headbody] —」が得られます。

(* name() で正しい名前を指定して) * `を介して子要素を見つけることができるのに、要素名を直接使用して子要素を見つけられないのはなぜですか?

  4  0


ベストアンサー

ソースXMLの `html`要素は名前空間を定義します。 マッチ式にそれを含め、 `xsl:stylesheet`要素でそれを参照する必要があります:

        ---[

            Found HTML element.

        ]---

6


スタイルシートの変更

        ---[

            Found HTML element.

        ]---

        ---[

            Found HTML element.

        ]---

説明

XMLドキュメントはデフォルトの名前空間を宣言しています: " http://www.w3.org/1999/xhtml "、およびこのデフォルトの名前空間を宣言する最上位要素から派生するすべての接頭辞のないノードは、この名前空間に属します。

一方、XPathでは、接頭辞のない名前は「名前空間なし」に属すると見なされます。

したがって、 `命令は、「名前空間なし」に属するすべての `html`要素にその本文を選択して適用します-そして、ドキュメントにはそのようなものはありません-唯一の html`要素はxhtml名前空間に属します。

溶液

デフォルトの名前空間に属する名前は、接頭辞なしで参照できません。 したがって、このような要素が属する名前空間にプレフィックスをバインドする必要があります。 このプレフィックスが `” x: “`の場合、そのような要素* prefixed *を `” x: “`で参照できます。

4


スタイルシートが名前空間を受け入れるように、名前空間を宣言しない回避策:

0


タイトルとURLをコピーしました