7

私の XSLT は属性を持ついくつかのタグを出力していxmlns:x="http://something"ます... この冗長な属性を回避するにはどうすればよいですか? 出力 XML は、 にも にも使用されx:tagませんx:attribute


XML の例:

<root><p>Hello</p><p>world</p></root>

XSL の例:

<xsl:transform version="1.0" 
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
   xmlns:xlink="http://www.w3.org/1999/xlink">
<xsl:output encoding="UTF-8" method="xml" version="1.0" indent="no"/>

<xsl:template match="root"><foo>
   <xsl:for-each select="p">
    <p><xsl:value-of select="." /></p>
   </xsl:for-each></foo>
   <xsl:for-each select="x">
    <link xlink:href="{x}" />
   </xsl:for-each></foo>
</xsl:template>

XML 出力の例:

<foo>
   <p xmlns:xlink="http://www.w3.org/1999/xlink">Hello</p>
   <p xmlns:xlink="http://www.w3.org/1999/xlink">world</p>
</foo>

xmlns:xlinkオーバーヘッドです。使用されません。


XSLT は名前空間を使用する必要があるが、出力は使用しない典型的なケース:

 <xsl:value-of select="php:function('regFunction', . )" />
4

2 に答える 2

8

Dimitre が既に述べたようxlinkに、XSLT のどこにも名前空間を使用していない場合は、その名前空間宣言を削除する必要があります。しかし、あなたの XSLT が、あなたが示していない場所でそれを実際に使用している場合、次のexclude-result-prefixes属性を使用して、それが出力されないようにすることができます。

<xsl:transform version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   exclude-result-prefixes="xlink">
于 2013-03-23T06:06:28.727 に答える
0

この名前空間宣言をxsl:stylesheet命令から削除するだけです。まったく使用されていません (したがって、必要ありません)

xmlns:xlink="http://www.w3.org/1999/xlink"

全体の変換は次のようになります。

<xsl:transform version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output encoding="UTF-8" method="xml" version="1.0" indent="no"/>

 <xsl:template match="root"><foo>
   <xsl:for-each select="p">
   <p class="a"><xsl:value-of select="." /></p>
   </xsl:for-each></foo>
 </xsl:template>
</xsl:transform>

提供された XML ドキュメントに適用すると、次のようになります。

<root><p>Hello</p><p>world</p></root>

名前空間のない結果を生成します:

<foo>
    <p class="a">Hello</p>
    <p class="a">world</p>
</foo>
于 2013-03-23T04:24:50.143 に答える