我正在尝试从XML进行XSLT转换,我想转换书籍内容,我有这样的XML文件,我需要用XSLT转换它。我知道热门为每个部分创建模板,但我只有XSLT的基本经验,所以我不知道如何应用它。
<book>
<section id="1">
<name>Heading First chapter</name>
<p><i/> some text </p>
<p> other text </p>
<subsection id="1.1">
<name>Heading second chapter</name>
<subsubsection id="1.1.1">
<name>Heading third chapter</name>
<p>some text</p>
</subsubsection>
</subsection>
</section>
</book>
我想要的是像这样的HTML:
<div>
<h1>1 Heading First chapter</h1>
<p><i>some text</i>
<p>other text</p>
<div>
<h2>1.1 Heading second chapter</h2>
<div>
<h3>1.1.1 Heading third chapter</h3>
<p>some text</p>
</div>
</div>
</div>
我的尝试:
<xsl:template match="/">
<body>
<xsl:for-each select="book">
<xsl:apply-templates select="."></xsl:apply-templates>
</xsl:for-each>
</body>
</html>
</xsl:template>
<xsl:template match="p">
<p>
<xsl:apply-templates/>
</p>
</xsl:template>
<xsl:template match="p[i]">
<p>
<em>
<xsl:value-of select="."/>
</em>
</p>
</xsl:template>
<xsl:template match="section/name">
<p>
<h2>
<xsl:value-of select="."/>
</a>
</h2>
</p>
</xsl:template>
你知道如何进行改造吗?
答案 0 :(得分:2)
当我应用下一个XSLT时:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="book">
<body>
<xsl:apply-templates select="node()" />
</body>
</xsl:template>
<xsl:template match="*[contains(local-name(), 'section')]">
<div>
<xsl:apply-templates select="node()" />
</div>
</xsl:template>
<xsl:template match="name">
<xsl:element name="h{count(ancestor::*[contains(local-name(), 'section')])}">
<xsl:value-of select="concat(parent::*/@id, ' ', .)" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
提供的输入XML
<?xml version="1.0" encoding="UTF-8"?>
<book>
<section id="1">
<name>Heading First chapter</name>
<p>
<i/> some text </p>
<p> other text </p>
<subsection id="1.1">
<name>Heading second chapter</name>
<subsubsection id="1.1.1">
<name>Heading third chapter</name>
<p>some text</p>
</subsubsection>
</subsection>
</section>
</book>
它产生:
<?xml version="1.0" encoding="UTF-8"?>
<body>
<div>
<h1>1 Heading First chapter</h1>
<p>
<i/> some text </p>
<p> other text </p>
<div>
<h2>1.1 Heading second chapter</h2>
<div>
<h3>1.1.1 Heading third chapter</h3>
<p>some text</p>
</div>
</div>
</div>
</body>