【发布时间】:2014-05-11 20:27:21
【问题描述】:
从昨天开始,我就在试验 XSLT,经过一番努力,我终于可以完成我的任务了。这包括获取“ATTRIBUTE”节点下的一些元素,并将它们自己转换为父元素的属性(顺便说一下,父元素可以有不同的名称)。这是我需要做的一个例子:
从这里->
<INVENTORY>
<ITEM>
<ATTRIBUTES>
<SERIALNUMBER>something1</SERIALNUMBER>
<LOCATION>something2</LOCATION>
<BARCODE>something3</BARCODE>
</ATTRIBUTES>
Some Item Value
</ITEM>
</INVENTORY>
到这里->
<INVENTORY>
<ITEM SERIALNUMBER="something1" LOCATION="something2" BARCODE="something3">
SomeItemValue
</ITEM>
</INVENTORY>
然而,看起来很奇怪,我在父节点中获取属性,但没有任何分隔或空格。我尝试了好几件事,但似乎都没有。
这是我用来进行转换的 XSLT 模板:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="us-ascii"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:if test="ATTRIBUTES">
<xsl:for-each select="ATTRIBUTES/*">
<xsl:attribute name="{name()}" separator=" ">
<xsl:value-of select="." />
</xsl:attribute>
</xsl:for-each>
</xsl:if>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="ATTRIBUTES">
</xsl:template>
</xsl:stylesheet>
我得到的输出如下:
<?xmlversion="1.0"encoding="us-ascii"?><INVENTORY><ITEMSERIALNUMBER="something1"LOCATION="something2"BARCODE="something3">SomeItemValue</ITEM></INVENTORY>
但是,如果尝试在 xsl:for-each 中放置 <xml:text> </xml:text>,我会立即停止查看属性,而不是看到空格。
感谢任何帮助!
【问题讨论】: