输入文件格式
<!DOCTYPE html>
<html>
<body>
<p>I am normal</p>
<p style="color:red;">I am<b> r<i>e</i>d</b></p>
<p style="color:blue;">I am <b>blue</b></p>
<p><b>I am <i>big</i></b></p>
</body>
</html>
预期产出(取自作者的评论意见)
<sp:html xmlns:"urn:unknown">
<sp:body>
<sp:p>I am normal</sp:p>
<sp:p>I am <sp:b emphasis="true">r <sp:i emphasis="true">
<sp:color textforecolor="red">e</sp:color>
</sp:i>
</sp:b>d </sp:p>
<sp:p>I am <sp:b emphasis="true">
<sp:color textforecolor="blue">blue</sp:color>
</sp:b>
</sp:p>
<sp:p>
<sp:b>I am<sp:span> </sp:span><sp:i>big</sp:i></sp:b>
</sp:p>
</sp:body>
</sp:html>
作者想知道如何将输入转换为给定的输出。
答案 0 :(得分:0)
我已编辑了您的问题(将预期输出添加到其中)。
此样式表接近您在评论中作为预期输出发布的内容。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:sp="urn:whatever"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="b">
<sp:b emphasis="true">
<xsl:apply-templates/>
</sp:b>
</xsl:template>
<xsl:template match="i">
<sp:i emphasis="true">
<xsl:apply-templates/>
</sp:i>
</xsl:template>
<xsl:template match="*">
<xsl:element name="sp:{local-name()}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
但是,达到预期输出存在一些问题:
xmlns:sp="urn:whatever"
,因为你没有提供一个p style="color:red;"
),但它在输出中仅应用于段落的一部分。我没有在这里看到&#34;规则&#34;如何应用颜色。 <b>
这样的标签在输入中是相同,但在输出中有不同的结果(<sp:i>
vs <sp:i emphasis="true">
)。对于相同的输入,您不能有不同的结果。必须有明确的转换规则。如果您有明确的转换规则,则应该能够根据需要完成样式表。