我对用于生成示例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,因为我不在乎)
我想我会在这里问两个问题: -
答案 0 :(得分:2)
您需要一个容器用于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)
使用您提供的示例代码,源和目标文件中的数据值之间似乎没有任何关系。
也许您可以提供一些真实(或更好的假)数据,因此我们可以看到实际的数据转换是什么。 (你上面显示的只是一个简单的替换,我猜这不是你真正想要的)