将 xml 标签替换为 html

Replace xml tags to html

大家好,我想将一些 xml 节点标签替换为 html 标签

示例:<emphasis role="bold">Diff.</emphasis>

我想把它转换成<b>Diff.</b>

示例:<emphasis role="italic">Diff.</emphasis>

我想把它转换成<i>Diff.</i>

有什么想法吗?

正如 this answer 所暗示的那样,XSLT 是处理 XML 从一种格式到另一种格式的实际标准。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>
    <xsl:template match="//emphasis[@role='bold']">
        <b><xsl:apply-templates select="node()" /></b>
    </xsl:template>
    <xsl:template match="//emphasis[@role='italic']">
        <i><xsl:apply-templates select="node()" /></i>
    </xsl:template>
</xsl:stylesheet>

XSLT 使用 XPath 查询来查询和处理内容。例如 //emphasis[@role='bold'] 匹配任何具有属性 role 且值为 'bold' 的标签(无论多深),在此类块中,您指定如何处理它。通过在 <b>...</b> 块中显示它,XSLT 也将在这些块中显示输出。 select="node()" 在那里插入节点的内容。

示例:假设上面的代码存储在process.xslt中,您可以使用xsltproc(或另一个XSLT处理器)处理它:

xsltproc process.xslt testinput.xml

如果测试输入是:

<?xml version="1.0"?>
<test>
<emphasis role="italic"><foo>Diff<emphasis role="italic">bar</emphasis></foo>.</emphasis>
<emphasis role="bold">Diff.</emphasis>
</test>

结果输出是:

$ xsltproc process.xslt testinput.xml
<?xml version="1.0" encoding="ISO-8859-15"?>
<test>
<i><foo>Diff<i>bar</i></foo>.</i>
<b>Diff.</b>
</test>

要将其输出为 HTML,您可以通过包含

覆盖 XSLT 的 main
<xsl:template match="/">
  <html>
  <head>
  <title>Some title</title>
  </head>
  <body>
  <xsl:apply-templates/>
  </body>
  </html>
</xsl:template>

<xsl:stylesheet>。在这种情况下,输出为:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15">
<title>Some title</title>
</head>
<body><test>
<i><foo>Diff<i>bar</i></foo>.</i>
<b>Diff.</b>
</test></body>
</html>