将xml标记替换为html

时间:2015-01-06 04:05:06

标签: html xml xslt

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

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

我想将其转换为<b>Diff.</b>

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

我想将其转换为<i>Diff.</i>

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

正如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

如果testinput是:

<?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>