Xml 将某些属性值转换为元素
我正在尝试转换一个xml,其中节点包含多个属性。我希望其中2个或3个属性成为元素,并在同一元素中插入一些额外的属性。下面是我想要转换的xml结构Xml 将某些属性值转换为元素,xml,xslt,Xml,Xslt,我正在尝试转换一个xml,其中节点包含多个属性。我希望其中2个或3个属性成为元素,并在同一元素中插入一些额外的属性。下面是我想要转换的xml结构 <Parent> <NODE attr1="INDEX" attr2="0" attr3="OFF" attr4="TRANSPARENT_MODE" attr5="HIGH" attr6="0" attr7="0" attr8="TIME"> <value>0
<Parent>
<NODE attr1="INDEX" attr2="0" attr3="OFF" attr4="TRANSPARENT_MODE" attr5="HIGH" attr6="0" attr7="0" attr8="TIME">
<value>0</value>
<alias>Index 0</alias>
</NODE >
</Parent>
0
索引0
我想将此xml转换为
<Parent>
<NODE attr2="0" attr3="OFF" attr4="TRANSPARENT_MODE" attr6="0" attr8="TIME">
<attr1 value="INDEX">
<attr5 value="HIGH">
<attr7 value="0">
<value>0</value>
<alias>Index 0</alias>
</NODE >
</Parent>
0
索引0
正如我所展示的,我只希望3个属性,即attr1 attr5和attr7成为元素,而其他属性保持原样
<xsl:template match="Parent/NODE/@attr1">
<attr1>
<xsl:attribute name="value"><xsl:value-of select="." /></xsl:attribute>
</attr1>
</xsl:template>
但在对3个属性执行此操作之后,其他属性就不会出现在转换后的xml中。如果您对此有任何帮助,我们将不胜感激。这并不完美,因为它会重复包含条件两次,但它可以工作:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="NODE">
<xsl:copy>
<xsl:for-each select="@*[name()!='attr1' and name()!='attr3']">
<xsl:copy />
</xsl:for-each>
<xsl:for-each select="@*[name()='attr1' or name()='attr3']">
<xsl:element name="{name()}">
<xsl:attribute name="value" select="."/>
</xsl:element>
</xsl:for-each>
<xsl:for-each select="node()">
<xsl:copy-of select="." />
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:transform>
Fiddle:如果没有XSLT代码的其余部分,很难判断,但是您确定要将其他属性复制到节点中吗?这可能是因为XSLT在复制任何现有属性之前添加了
attr1
元素,而这些属性是您希望保留为属性的。根据规范,这被视为错误(请参阅)。正如该链接中提到的,XSLT处理器必须选择忽略属性。