当xsl文件中的模板与所包含的xsl文件的模板重叠时,所包含的xsl不会添加所需的内容

  • 本文关键字:xsl 包含 文件 添加 重叠 .net xslt xslt-1.0
  • 更新时间 :
  • 英文 :


我生成了各种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.xsl1_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>

相关内容

  • 没有找到相关文章

最新更新