我生成了各种XML文件,并将它们用作我的程序的测试用例。我使用XSLT从基本的测试用例生成更复杂的测试用例,以避免XML内容的重复。xsl
文件包括其他xsl
文件,用于向现有测试用例添加一些XML内容。
我有一个问题:当xsl
文件中的模板与包含的xsl
文件中的一个模板重叠时,包含的模板将不会添加所需的内容。
Hello.xml
:
<EBC>
<Positionen>
<Position>
<ArtikelNr>HelloWorldProductRef</ArtikelNr>
<HerstNr>Hello world! (ProductName)</HerstNr>
</Position>
</Positionen>
</EBC>
Hello.xsl
:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<xsl:apply-templates select="document('Hello.xml')/*" />
</xsl:template>
</xsl:stylesheet>
1_product_in_1_cat.xsl
:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:include href="Hello.xsl" />
<xsl:template match="Position/*[last()]" xml:space="preserve">
<xsl:copy-of select="." />
<WWSWGNr>167000</WWSWGNr><WWSWGName_de>Mobotix IP Kameras</WWSWGName_de>
</xsl:template>
</xsl:stylesheet>
1prod_2img_1cat.xsl
:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:include href="1_product_in_1_cat.xsl" />
<xsl:template match="Position/*[last()]" xml:space="preserve">
<xsl:copy-of select="." />
<Bilder>
<Bild>12011085_grob_102.jpg</Bild>
<Bild>12011085_090.jpg</Bild>
</Bilder>
</xsl:template>
</xsl:stylesheet>
Hello.xsl
的输出和1_product_in_1_cat.xsl
的输出是正确的,我不想改变它。1prod_2img_1cat.xsl
的输出不是我想要的。
实际输出为
<EBC>
<Positionen>
<Position>
<ArtikelNr>HelloWorldProductRef</ArtikelNr>
<HerstNr>Hello world! (ProductName)</HerstNr>
<Bilder>
<Bild>12011085_grob_102.jpg</Bild>
<Bild>12011085_090.jpg</Bild>
</Bilder>
</Position>
</Positionen>
</EBC>
预期输出为
<EBC>
<Positionen>
<Position>
<ArtikelNr>HelloWorldProductRef</ArtikelNr>
<HerstNr>Hello world! (ProductName)</HerstNr>
<WWSWGNr>167000</WWSWGNr><WWSWGName_de>Mobotix IP Kameras</WWSWGName_de>
<Bilder>
<Bild>12011085_grob_102.jpg</Bild>
<Bild>12011085_090.jpg</Bild>
</Bilder>
</Position>
</Positionen>
</EBC>
我不想让1prod_2img_1cat.xsl
了解Hello.xml
和其他文件的标签名称和结构。有可能达到预期的结果吗?
请注意,Hello.xsl
和1_product_in_1_cat.xsl
的输出必须保持不变,因为它们在其他地方使用。
顺便说一下,我在xsl
文件的输入上传递了一个空的xml
文件,所以实际的输入是由document()
函数定义的。
我认为您希望使用xsl:import
而不是xsl:include
,然后替换
<xsl:template match="Position/*[last()]" xml:space="preserve">
<xsl:copy-of select="." />
<Bilder>
<Bild>12011085_grob_102.jpg</Bild>
<Bild>12011085_090.jpg</Bild>
</Bilder>
</xsl:template>
带有
<xsl:template match="Position/*[last()]" xml:space="preserve">
<xsl:apply-imports/>
<Bilder>
<Bild>12011085_grob_102.jpg</Bild>
<Bild>12011085_090.jpg</Bild>
</Bilder>
</xsl:template>