这是我的XML:
<root>
<parameters>
<parameter>
<key>sEmail</key>
<value>cauchyjp@gmail.com</value>
<type>string</type>
<length>255</length>
</parameter>
<parameter>
<key>sFirstName</key>
<value>Bill</value>
<type>string</type>
<length>40</length>
</parameter>
</parameters>
<root>
我想检索密钥sEmail的值,并使用XML to XML xslt将其作为属性添加到根元素。
以下是预期的结果:
<root email="cauchyjp@gmail.com">
<parameters>
<parameter>
<key>sEmail</key>
<value>cauchyjp@gmail.com</value>
<type>string</type>
<length>255</length>
</parameter>
<parameter>
<key>sFirstName</key>
<value>Bill</value>
<type>string</type>
<length>40</length>
</parameter>
</parameters>
<root>
与this link类似但具有元素值而非属性的值。
有人能帮助我吗?感谢
答案 0 :(得分:2)
您可以测试子元素的值是否为'sEmail':
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="parameters">
<parameters>
<xsl:attribute name="email">
<xsl:value-of select="parameter[key='sEmail']/value"/>
</xsl:attribute>
<xsl:copy-of select="*"/>
</parameters>
</xsl:template>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:2)
可以使用AVT :
以更干净的方式完成<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*">
<root email="{*/*[key = 'sEmail']/value}">
<xsl:apply-templates/>
</root>
</xsl:template>
</xsl:stylesheet>
将此转换应用于提供的XML文档时:
<root>
<parameters>
<parameter>
<key>sEmail</key>
<value>cauchyjp@gmail.com</value>
<type>string</type>
<length>255</length>
</parameter>
<parameter>
<key>sFirstName</key>
<value>Bill</value>
<type>string</type>
<length>40</length>
</parameter>
</parameters>
</root>
产生了想要的正确结果:
<root email="cauchyjp@gmail.com">
<parameters>
<parameter>
<key>sEmail</key>
<value>cauchyjp@gmail.com</value>
<type>string</type>
<length>255</length>
</parameter>
<parameter>
<key>sFirstName</key>
<value>Bill</value>
<type>string</type>
<length>40</length>
</parameter>
</parameters>
</root>