大家好我想把一些xml节点标签替换为html标签
示例:<emphasis role="bold">Diff.</emphasis>
我想将其转换为<b>Diff.</b>
示例:<emphasis role="italic">Diff.</emphasis>
我想将其转换为<i>Diff.</i>
有什么想法吗?
答案 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>