我有以下xml:
<Head>
<Group1>
<Ref>
<RefType>ABC123</RefType>
<RefIdentifier>123456789</RefIdentifier>
<RefDate>2013-11-30</RefDate>
</Ref>
</Group1>
<Group2>
<UOM>
<UOMType>XYZ789</UOMType>
<UOMIdentifier>BlahBlah</UOMIdentifier>
</UOM>
</Group2>
<Group3>
<Rec>
<RecType>XYZ789</RecType>
<RecIdentifier>HalbHalb</RecIdentifier>
</Rec>
</Group3>
</Head>
我需要转变为:
<Head>
<Ref>
<Identifier type="ABC123">123456789</Identifier>
<RefDate>2013-11-30</RefDate>
</Ref>
<UOM>
<Identifier type="XYZ789">BlahBlah</Identifier>
</UOM>
<Rec>
<Identifier type="XYZ789">HalbHalb</Identifier>
</Rec>
</Head>
使用xslt。到目前为止,我有以下内容:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates select="/Head"/>
</xsl:template>
<xsl:template match="Head">
<Head>
<xsl:for-each select="Group1/Ref">
<Ref>
<Identifier><xsl:value-of select="RefIdentifier"/></Identifier>
<RefDate><xsl:value-of select="RefDate"/></RefDate>
</Ref>
</xsl:for-each>
<xsl:for-each select="Group2/UOM">
<UOM>
<Identifier><xsl:value-of select="UOMIdentifier"/></Identifier>
</UOM>
</xsl:for-each>
<xsl:for-each select="Group3/Rec">
<Rec>
<Identifier><xsl:value-of select="RecIdentifier"/></Identifier>
</Rec>
</xsl:for-each>
</Head>
</xsl:template>
</xsl:stylesheet>
给了我
<Head>
<Ref>
<Identifier>123456789</Identifier>
<RefDate>2013-11-30</RefDate>
</Ref>
<UOM>
<Identifier>BlahBlah</Identifier>
</UOM>
<Rec>
<Identifier>HalbHalb</Identifier>
</Rec>
</Head>
但我不知道如何在Ref,UOM和Rec标签的'Identifier'标签中获取'type'属性及其值。我怎么能这样做?
答案 0 :(得分:0)
但我不知道如何获取'type'属性及其值 Ref,UOM和Rec标签的'Identifier'标签。我怎么能这样做?
使用:
<Identifier type="{RefType}"><xsl:value-of select="RefIdentifier"/></Identifier>
花括号是一个属性值模板,它允许您在其中替换XPath表达式的值。它们仅允许在XSLT样式表中的某些属性值中使用,但使用它们的一个常见位置是文字结果元素。
仅供参考:Ref
,UOM
和Rec
不是“标签”,而是元素。它们使用开始和结束标记进行序列化,但XSLT不对标记进行操作;它运作在元素上。用标签来思考和谈论它们就像是说“我欠史蒂夫的手5美元”而不是“我欠史蒂夫5美元”。我并不是想要迂腐,而是将XML视为节点树,其中每个元素都是单个节点而不是两个独立的标签,这将有助于您更好地理解样式表的工作方式。 XSLT将树转换为另一个树,并且仅在样式表完成后才会将序列化转换为标记;有时,XSLT甚至无法控制序列化。
答案 1 :(得分:0)
使用attribute
标记:
<Identifier>
<xsl:attribute name="type"><xsl:value-of select="RefType"/></xsl:attribute>
<xsl:value-of select="RefIdentifier"/>
</Identifier>
这会将类型作为属性插入。