我需要使用xsl文件转换xml,问题是:我有几个具有相同名称但属性不同的标记,我必须将其转换为使用其属性名称更改其名称并打印其值。 这里是示例:
<INDEX_FIELDS>
<FIELD NAME= "Field1" VALUE= "value1"/>
<FIELD NAME= "Field2" VALUE= "value2"/>
<FIELD NAME= "Field3" VALUE= "value3"/>
<FIELD NAME= "Field4" VALUE= "value4"/>
</INDEX_FIELDS>
我想像这样的示例:
<INDEX_FIELD>
<FIELD1>VALUE1</FIELD1>
<FIELD2>VALUE2</FIELD2>
<FIELD3>VALUE3</FIELD3>
<FIELD4>VALUE4</FIELD4>
</INDEX_FIELD>
我只能使用xsl转换。有人可以给我任何帮助吗?我已经访问了W3C学校站点,尝试了几种方法,但是似乎没有任何效果。感谢任何人都会回答。
这是我的xslt:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" version="1.0">
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<ROOT>
<HEAD>
<TAG><xsl_value-of select="ROOT/HEAD/TAG"/></TAG>
<-- Several tag -->
</HEAD>
<BODY>
<DOCUMENTS><--Here it is a list of documents -->
<xsl:for-each select="ROOT/BODY/DOCUMENTS/DOCUMENT">
<DOCUMENT>
<xsl:for-each select="INDEX_FIELDS/FIELD">
enter code here
</xsl:for-each>
<-- Closing tags -->
答案 0 :(得分:1)
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="FIELD">
<xsl:element name="{@NAME}">
<xsl:value-of select="@VALUE"/>
</xsl:element>
</xsl:template>
Try it.
答案 1 :(得分:0)
不需要使用for-each循环。
您还可以使用与XML文档的一部分匹配的xsl:template match
规则。每当XML中出现匹配项时,就会执行此规则
构建XSLT的替代方法:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" version="1.0">
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<ROOT>
<HEAD>
<TAG><xsl_value-of select="ROOT/HEAD/TAG"/></TAG>
<-- Several tag -->
</HEAD>
<BODY>
<DOCUMENTS>
<xsl:apply-templates match="DOCUMENT"/>--this tells the XSLT processor to find all DOCUMENT nodes and process them.
<-- Closing tags -->
....
<xsl:template match="DOCUMENT">
<DOCUMENT>
process your Document nodes here
<xsl:apply-templates/> --this makes sure the subnodes in the DOCUMENT node are processed.
</DOCUMENT>
</xsl:template>
....
<xsl:template match="FIELD">
<xsl:element name="{@NAME}">
<xsl:value-of select="@VALUE"/>
</xsl:element>
</xsl:template>
XSLT教程: http://edutechwiki.unige.ch/en/XSLT_Tutorial_-_Basics#A_first_glance_at_XSLT
XSLT与许多编程语言的工作方式略有不同:您可以在源文档中指定可能节点的列表以及如何处理它们,而不是使用带有子例程等的指令列表。