使用XSLT从XML保留格式化标记

时间:2015-04-22 21:22:32

标签: html xml xslt tags formatting

我必须使用XSLT显示XML文档,但我想应用原始XML文档中的<p><i> HTML标记。例如,XML中的p标签将创建一个新段落。实现这一目标的最佳方法是什么? XML和XSLT代码发布在下面。

编辑:澄清原始问题

<?xml version="1.0" encoding="UTF-8" ?> 
<?xml-stylesheet type="text/xsl" href="tour.xsl"?>
<cars>
   <car>
      <description>
        <p><i>There is some text here</i> There is some more text here</p>
        <p>This should be another paragraph</p>
        <p>This is yet another paragraph</p>
      </description>
   </car>
</cars>

<?xml version="1.0" encoding="UTF-8" ?>
    <xsl:stylesheet version="1.0"        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" version="4.0"/>

    <xsl:template match="/">
        <html>
            <head>
                <title>Title</title>
            </head>
            <body>
                <xsl:value-of select="car"/><p/>       
            </body>
        </html>
    </xsl:template>
 </xsl:stylesheet>`

1 个答案:

答案 0 :(得分:0)

您可以使用这样的样式表回答您的实际问题,该样式表使用apply-templates

<?xml version="1.0" encoding="UTF-8" ?>
    <xsl:stylesheet version="1.0"        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" version="4.0" indent="yes"/>

    <xsl:template match="/">
        <html>
            <head>
                <title>Title</title>
            </head>
            <body>
                <xsl:apply-templates select="/cars/car/description/*"/>
                <p/>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
 </xsl:stylesheet>

但是,如果你有多个cars,你可能想要一些头条新闻。然后像这样的样式表可能指向这个目标:

<?xml version="1.0" encoding="UTF-8" ?>
    <xsl:stylesheet version="1.0"        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" version="4.0" indent="yes"/>

    <xsl:template match="/">
        <html>
            <head>
                <title>Title</title>
            </head>
            <body>
                <xsl:apply-templates select="/cars/car/*"/>
                <p/>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="description">
        <h1>Subtitle</h1>
        <xsl:apply-templates select="*"/>
    </xsl:template>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
 </xsl:stylesheet>