用于创建模板XML的XSLT

时间:2010-01-04 00:57:15

标签: xml xslt

我对用于生成示例XML文件的xsl转换不太了解。基本上,我正在尝试从应用程序生成的XSD生成一个大而复杂的XML模板文件。

我使用XMLSpy从XSD生成示例XML文件,我的下一步是将值转换为所需的值。

我想要转换的例子......

<TEST>
  <VALUE1>String</VALUE1>
  <VALUE1>aaaa</VALUE1>
  <VALUE1>aaaaaaaaaaaaa</VALUE1>
</TEST>
<TEST>
  <VALUE1>String</VALUE1>
  <VALUE1>aaaa</VALUE1>
  <VALUE1>aaaaaaaaaaaaa</VALUE1>
</TEST>

进入

<TEST>
  <VALUE1>TEST_1.VALUE1_1.text</VALUE1>
  <VALUE1>TEST_1.VALUE1_2.text</VALUE1>
  <VALUE1>TEST_1.VALUE1_3.text</VALUE1>
</TEST>
<TEST>
  <VALUE1>TEST_2.VALUE1_1.text</VALUE1>
  <VALUE1>TEST_2.VALUE1_2.text</VALUE1>
  <VALUE1>TEST_2.VALUE1_3.text</VALUE1>
</TEST>

我非常感谢任何帮助,因为我是XML转换的新手。

感谢您的反馈意见,对不起,我对请求的要求不是很清楚。

总之,我正在考虑为元素提供某种计数器,并用增强值和计数替换XML中的值。

即。如果这是第一次找到TEST并且第一次找到VALUE1,则将TAG值替换为TEST_1.VALUE1_1.text,然后在整个树结构中重复。如果我有: -

<TEST><VALUE1><SUBVAL1>aaaaa</TEST></VALUE1></SUBVAL1>然后我会考虑用TEST_1.VALUE1_1.SUBVAL1_1.text替换aaaaaa(忽略aaaaa,因为我不在乎)

我想我会在这里问两个问题: -

  1. 这可能吗?
  2. 如果是这样,那么XSLT将成为最好的工具(如果需要,我可以用Java包装它并使用DOM / SAX来解析和替换 - 只是认为这样会有点过分)

2 个答案:

答案 0 :(得分:2)

  1. 是的。
  2. 这是一个很好的工具。
  3. 您需要一个容器用于TEST元素,因此您只有一个根元素。然后以下应该做的工作。

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
      <xsl:template match="node()">
        <xsl:copy>
           <xsl:apply-templates/>
        </xsl:copy>
      </xsl:template>
      <xsl:template match="text()">
        <xsl:apply-templates select=".." mode="text" />
        <xsl:text>text</xsl:text>
      </xsl:template>
      <xsl:template match="*" mode="text">
        <xsl:apply-templates select=".." mode="text" />
        <xsl:value-of select="local-name()"/>
        <xsl:text>_</xsl:text>
        <xsl:value-of select="count(preceding-sibling::*) + 1"/>
        <xsl:text>.</xsl:text>
      </xsl:template>
      <xsl:template match="/*" mode="text" />
    </xsl:stylesheet>
    

答案 1 :(得分:1)

使用您提供的示例代码,源和目标文件中的数据值之间似乎没有任何关系。

也许您可以提供一些真实(或更好的假)数据,因此我们可以看到实际的数据转换是什么。 (你上面显示的只是一个简单的替换,我猜这不是你真正想要的)