需要转换具有带有属性(名称)的标记(dynamicVariable)的xml文件。必须使用xsl将此xml文件转换为相同的xml文件,以使标记(dynamicVariable)具有相同的结构使用它及其标签内容也应该是属性的值。
需要转换下面的xml文件
<Content>
<alertHeader>
<text xmlns="http://abc.com" xmlns:w="http://def.com"> Claim
<dynamicVariable name="Claim_Reference" />: More Information Needed
</text>
<contactUs>false</contactUs>
</alertHeader>
<body>
<text> ATM/Debit Card Claim:
<strong><dynamicVariable name="Claim_Reference" /></strong>
</text>
</body>
</Content>
采用相同的格式,但具有'name'属性的标记应该以输出xml文件的形式显示为此格式
<dynamicVariable name="Claim_Reference" />Claim_Reference</dynamicVariable>
任何人都可以在转换相同内容时提供必要的xsl文件。希望它完成使用
<xsl:copy></xsl:copy> or <xsl:copy-of /> tags .
答案 0 :(得分:1)
就这么简单:
<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="*[name() = 'dynamicVariable']">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:value-of select="@name"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
在提供的XML文档上应用此转换时:
<Content>
<alertHeader>
<text xmlns="http://abc.com" xmlns:w="http://def.com"> Claim
<dynamicVariable name="Claim_Reference" />: More Information Needed
</text>
<contactUs>false</contactUs>
</alertHeader>
<body>
<text> ATM/Debit Card Claim:
<strong>
<dynamicVariable name="Claim_Reference" />
</strong>
</text>
</body>
</Content>
产生了想要的正确结果:
<Content>
<alertHeader>
<text xmlns="http://abc.com" xmlns:w="http://def.com"> Claim
<dynamicVariable name="Claim_Reference">Claim_Reference</dynamicVariable>: More Information Needed
</text>
<contactUs>false</contactUs>
</alertHeader>
<body>
<text> ATM/Debit Card Claim:
<strong>
<dynamicVariable name="Claim_Reference">Claim_Reference</dynamicVariable>
</strong>
</text>
</body>
</Content>
<强>解释强>:
identity rule “按原样”复制每个节点。
单个模板会覆盖标识模板。它匹配名称为“dynamicVariable
”的任何名称“strong
”而不管名称空间,并且它是dynamicVariable
的子项(因此指定更多上下文有助于我们仅处理name
的这种情况,但保留前面的内容一个“按原样”)。
重写tempalte shallo-复制当前节点,然后复制其属性,最后创建一个text-node子节点,其内容是当前(匹配)元素的{{1}}属性的字符串值
答案 1 :(得分:0)
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:t="http://abc.com">
<xsl:output method="xml"/>
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="dynamicVariable[@name]|t:dynamicVariable[@name]">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:value-of select="@name"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>