在90%的XSLT问题中,最大的挑战不是问题的技术方面,而是如何以匹配模式和相应输出的形式阐明转换规则。与其给你一张样式表,我还不如给你一个图案&问题的输出视图。你应该能够根据这个制作一个样式表。不涉及特殊技术。
比较您的输入和输出文档,我将如下描述转换规则。
-
将输入文档复制到输出,但以下情况除外。
-
在<身体>具有以下文字
<script type="t/j" src="pqr.js" />
<script type="t/j" src="pqr.js" />
-
附加到<身体>元素属性@onload=“load()”和@onunload=“unload())”。
-
对于任何<div>将@class更改为QT并将id更改为456。
-
对于任何<脚本>元素将@src=“xyz.js”更改为“lmn.js”。
-
对于任何<脚本>元素
在体内
使用@src=“abc.js”,删除。
-
将任何<div>在<形式>在表格结束之前,包括以下文字
<br/><input type="submit" name="sub" value="Done"/>
-
替换任何<div>替换为@id=“ta12”的元素:
<div id="pa" value="10" />
-
复制任何<div class=“iDev”>,除非将其子项替换为以下文字
<div id="ta8" class="bl" style="dis:bl">XYZ</div>
<br/>
<input type="radio" name="ke8" value="0" />
<div id="tab8" class="bl" style="dis:bl">T</div>
<input type="radio" name="ke8" value="1" />
<div id="tab8" class="bl" style="dis:bl">F</div>
使现代化
OP要求提供第5点的模板。这是一个关于如何复制节点的通用解决方案,只需更改一个属性。。。
<xsl:template match="xhtml:script[@src='xyz.js']">
<xsl:copy>
<xsl:apply-templates select="@*[not(@src)]" />
<xsl:attribute name="src">lmn.js</xsl:attribute>
<xsl:apply-templates select="node()" />
</xsl:copy>
</xsl:template>
如果你不介意有一个不太通用的解决方案,并且可以假设script元素没有子元素,只有一个其他属性@type=“t/j”,例如,你可以使用这样一个更简洁、更具体的模板(但我不推荐它-我只是列出你的选项。。。
<xsl:template match="xhtml:script[@src='xyz.js']">
<xhtml:script type="t/j" src="lmn.js" />
</xsl:template>
第6点是。。。
<xsl:template match="xhtml:body//xhtml:script[@src='abc.js']" />