因此,基于我之前的问题(XSLT transform child element to attribute in the parent),我想将子元素中的数据用作父元素中的属性。问题是当我在" poolColor"之前转换具有另一个子元素的元素时,poolColor不会以某种方式添加为属性。
工作:
<Exchange xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<parent xsi:type="SinglePool">
<poolColor colorType="Basecolor" colorKey="GN"/>
<poolLength type="full_length" length="2"/>
</parent>
</Exchange>
结果:
<Exchange xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<parent xsi:type="SinglePool" basecolor="GN">
<poolLength type="full_length" length="2" />
</parent>
</Exchange>
不工作:
<Exchange xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<parent xsi:type="SinglePool">
<poolLength type="full_length" length="2" id="N7" />
<poolColor colorType="Basecolor" colorKey="GN" id="N3" />
</parent>
</Exchange>
结果:
<Exchange xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<parent xsi:type="SinglePool">
<poolLength type="full_length" length="2" id="N7" />
</parent>
</Exchange>
我使用的XSL代码如下:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="no" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="poolColor">
<xsl:attribute name='{translate(@colorType,"BC","bc")}'>
<xsl:value-of select="@colorKey" />
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
如果有人能够了解为什么会发生这种情况,我会很高兴。
答案 0 :(得分:1)
compile 'com.google.android.gms:play-services-gcm:7.8.0'
已添加到xsl:attribute
,因此第二个示例中的 <poolength>
无效。根据XSLT rec:
以下是所有错误:
添加子项后,向元素添加属性 它;实现可以发出错误信号或忽略错误 属性。
...
以下内容可行,因为在其他内容之前处理任何<parent>
子项:
poolColor