如果elemnt具有此属性,我需要使用任意属性的值替换元素的内容。我需要使用XSLT表(2.0),但我不知道如何做这样的事情。
例如,假设我有这个xml文档。
<?xml version="1.0" encoding="UTF-8"?>
<document>
Hi my name is <tag-A flag="Bob">Leopold</tag-A>
and I'm fond of <tag-B flag="coding">literature</tag-B>
unless in the <tag-C whatever="evening">morning</tag-C>
</document>
然后xslt将更改具有flag
属性的任何元素的内容,例如,对于该属性的值,并将所有内容括在<p>
标记中。这是我在那种情况下得到的输出。
<p>Hi my name is Bob
and I'm fond of coding
unless in the morning</p>
我怎么能这样做?
答案 0 :(得分:2)
这会产生您一直要求的输出:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match = "document">
<p><xsl:apply-templates select="node()"/>
</p>
</xsl:template>
<xsl:template match = "*[@flag]">
<xsl:value-of select="@flag"/>
</xsl:template>
</xsl:stylesheet>
请注意@whatever被忽略了,但可以轻松折叠。
此外,我认为您对使用&lt; p&gt;的文档感到满意。作为最外层的元素?
答案 1 :(得分:0)
注意:不清楚你的意思是问题标题是“任意”,然后问题中的文字说“flag”属性。如果您的XML仅作为show而您想要替换为任何属性并且您只有一个,那么您可以这样做(只需要XSL 1.0):
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="document">
<p>
<xsl:apply-templates/>
</p>
</xsl:template>
<xsl:template match="node()">
<xsl:apply-templates select="@*"/>
</xsl:template>
<xsl:template match="text()">
<xsl:copy/>
</xsl:template>
</xsl:stylesheet>
XML的输出是:
<p>
Hi my name is Bob
and I'm fond of coding
unless in the evening
</p>