如何创建属性节点并将其附加到输出节点..?
问题描述:
我无法想出一个办法附加属性节点在以下情况下输出节点..如何创建属性节点并将其附加到输出节点..?
输入XML:
<record>
<user>
<field name="LastName">user33</field>
<field name="FirstName">user33</field>
<field name="Title"/>
<field name="Email">[email protected]</field>
<field name="WorkPhone"/>
<field name="Fax"/>
<field name="Description">new user</field>
<field name="Group Member"> group1</field>
</user>
</record>
预期输出:
<add class="user" id-val="user33 user33" >
<add-value attr="LastName">
<value type="string">user33</value>
</add-attr>
<add-value attr="FirstName">
<value type="string">user33</value>
</add-value>
<add-value attr="Email">
<value type="string">[email protected]</value>
</add-value>
<add-value attr="Description">
<value type="string">new user</value>
</add-value>
</add>
这是我到目前为止的xslt代码片段。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:variable name="lessThan" select="'<'"/>
<xsl:variable name="GreaterThan" select="'>'"/>
<xsl:template match="user">
<xsl:variable name="temp1" select="concat(field[@name=$srcdn-field-name1],' ')"/>
<xsl:variable name="temp2" select="concat($temp1,field[@name=$srcdn-field-name2])"/>
<xsl:variable name="src" select="translate($temp2,'+=,.\','-----')"/>
<xsl:value-of disable-output-escaping="yes" select="$lessThan"/>
<xsl:text>add</xsl:text>
<xsl:value-of disable-output-escaping="yes" select="$GreaterThan"/>
<!-- it is required to add attribute id-val to element <add> with value of $src-->
<xsl:for-each select="field[string()]">
<xsl:variable name="fieldValue" select="normalize-space(.)"/>
<xsl:choose>
<xsl:when test="@name !='Group Member'">
<add-value attr="{@name}">
<value type="string">
<xsl:value-of select="$fieldValue"/>
</value>
</add-value>
</xsl:when>
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="$lessThan"/>
<xsl:text>/add</xsl:text>
<xsl:value-of disable-output-escaping="yes" select="$GreaterThan"/>
<!--perform some other operations-->
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
现在,我的要求是有ID-VAL和类为<add>
属性。在此背景下,<xsl:attribute>
不工作。我需要对xslt进行哪些更改?
答
您不能将属性添加到不是元素的东西。这是不尝试手动构建开始和结束标记的许多原因之一。试试这个:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="user">
<xsl:variable name="temp1" select="concat(field[@name=$srcdn-field-name1],' ')"/>
<xsl:variable name="temp2" select="concat($temp1,field[@name=$srcdn-field-name2])"/>
<xsl:variable name="src" select="translate($temp2,'+=,.\','-----')"/>
<add class="user" id-val="{$src}">
<!-- it is required to add attribute id-val to element <add> with value of $src-->
<xsl:for-each select="field[string()]
[not((. | preceding-sibling::field)
[@name = 'Group Member'])]">
<add-value attr="{@name}">
<value type="string">
<xsl:value-of select="normalize-space()"/>
</value>
</add-value>
</xsl:for-each>
</add>
</xsl:template>
</xsl:stylesheet>
首先感谢replying..With上述建议的更改的,**'组别1'**也来为我的输出的一部分,该预计不会.. – FarSh018 2013-04-30 12:20:54
请尝试上述修改。 – JLRishe 2013-04-30 12:40:47
在你以前提交的答复中,我用'self'替换了'兄弟之前',它工作正常。我会检查你所做的最新修改。 – FarSh018 2013-04-30 12:51:35