2017-05-10 6 views
0

1つのXSLTスタイルシートで複数のEXSLT拡張を宣言する適切な方法は何ですか?XSLTスタイルシートで複数のEXSLT拡張を宣言する適切な方法

さらに重要なのはxmlns:*="http://exslt.org/*"の目的は何ですか?

documentationは言う:xmlns:date="http://exslt.org/dates-and-timesは、出力ドキュメントのルートノードに表示されていないためにちょうどように

You can use the extension-element-prefixes attribute to prevent the extension namespaces from being output in the result tree.

がありますか?もしそうなら、それはなぜ重要なのでしょうか?次のスタイルシートで

私はエラーを取得する:

lxml.etree.XMLSyntaxError: Attribute extension-element-prefixes redefined, line 7, column 40

私はlxmlプロセッサとXSLT 1.0を使用しています。

XML入力

<?xml version='1.0'?> 
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl" version="1.0"?> 
<item>test</item> 

XSLT 1.0スタイルシート

<xsl:stylesheet 
     version="1.0" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:str="http://exslt.org/strings" 
     xmlns:date="http://exslt.org/dates-and-times" 
     extension-element-prefixes="str" 
     extension-element-prefixes="date"> 

<xsl:template match="/"> 
    <html> 
    <body> 
     <xsl:value-of 
     select="str:padding(2 - string-length(date:month-in-year()), 0)"/> 
     <xsl:value-of select="date:month-in-year()"/> 
    </body> 
    </html> 
</xsl:template> 

</xsl:stylesheet> 

HTML出力

<html xmlns:str="http://exslt.org/strings" xmlns:date="http://exslt.org/dates-and-times"> 
    <body>05</body> 
</html> 

答えて

1

ますxsl:extension-element-prefixes属性に空白で区切られた宣言された名前空間接頭辞のリストを設定する必要があります。あなたの例では、それは次のようになります。

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:str="http://exslt.org/strings" 
xmlns:date="http://exslt.org/dates-and-times" 
extension-element-prefixes="str date"> 

And more importantly what is the purpose of xmlns:*="http://exslt.org/*" ?

これは、名前空間URIに接頭辞をバインドする名前空間宣言です。接頭辞は、必要なものであれば何でも構いません。つまり、要素がサポートされている拡張に属する名前空間にあることをプロセッサに知らせる名前空間URIです。

これは、宣言が出力に現れないようにすることとは関係ありません。これは、extension-element-prefixesまたはexclude-result-prefixes属性のいずれかを使用して行います。何でこれが大切ですか?名前空間宣言がターゲットスキーマの一部でない場合は、重要なことがあります。

関連する問題