这个问题与this one非常相似。除了我只想保留<br />
和一些<img>
标签(使用class =“visible”)。来自:
<example>
<text>
Some text with <br /> and <img src="source" /> then text .... <img class="visible" src="source" />
</text>
</example>
拥有:
<div class="example">
<p>Some text with <br /> and then text .... <img class="visible" src="source" /></p>
</div>
答案 0 :(得分:1)
此转化:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="example">
<div class="example">
<xsl:apply-templates/>
</div>
</xsl:template>
<xsl:template match="example/text">
<p><xsl:apply-templates/></p>
</xsl:template>
<xsl:template match=
"example/text/*
[not(self::br)
and
not(self::img[@class='visible'])
]"/>
</xsl:stylesheet>
应用于提供的XML文档时,会生成所需的正确结果:
<div class="example"><p>
Some text with <br/> and then text .... <img class="visible" src="source"/></p></div>
答案 1 :(得分:-1)
我没有测试它,但我认为这应该适合你。
<xsl:template match="/example/text">
<div class="example">
<p>
<xsl:copy-of select="@* | node()[name()='br' or (name()='img' and @class='visible')]"/>
</p>
</div>
</xsl:template>