Как 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, вы можете переопределить main
в XSLT, включив
<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>
Похоже, работа для XSLT –
@SanthoshNayak: Вы можете привести (экстенсивный) потребительная случай поэтому мы можем проверить поведение? –
@CommuSoft У меня есть xml-файл, я должен преобразовать его в html .. поэтому я конвертирую теги узлов XML в связанные теги html. –