我生成各种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
的输出必须保持不变,因为它们会在别处使用。
顺便说一句,我在xml
个文件的输入上传递了一个空虚xsl
文件,因此实际输入由document()
函数定义。
答案 0 :(得分:2)
我认为您要使用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>