Html 使用XSLT保留XML中的格式标记
我必须使用XSLT显示XML文档,但我希望应用原始XML文档中的Html 使用XSLT保留XML中的格式标记,html,xml,xslt,tags,formatting,Html,Xml,Xslt,Tags,Formatting,我必须使用XSLT显示XML文档,但我希望应用原始XML文档中的和HTML标记。例如,XML中的p标记将创建一个新段落。实现这一目标的最佳方式是什么? XML和XSLT代码发布在下面 编辑:澄清了原来的问题 <?xml version="1.0" encoding="UTF-8" ?> <?xml-stylesheet type="text/xsl" href="tour.xsl"?> <cars> <car> <desc
和
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>`
这里有一些文字这里还有一些文字
这应该是另一段
这是另一段
标题
`
您可以扩展模板以复制p
元素,如下所示:
<?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:for-each select="/cars/car">
<xsl:for-each select="description/p">
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
以下是IE 11中输出的屏幕截图:
更新2 我尝试了模板解决方案,但它仍然返回未格式化的文本 一行 如果给IE 11一个没有
XML样式表的XML文件
PI
<?xml-stylesheet type='text/xsl' href='tour.xsl'?>
因此无法找到:
注意:按F-12以显示控制台
然后,如果单击“允许阻止内容”按钮:
您会看到诊断消息
tour\u not\u FIND.xsl
not found如果您解决了IE找不到XSLT文件的问题,那么您应该在浏览器中看到XSLT文件的格式化结果。您的实际问题可以用这样一个样式表来回答,它使用应用模板
<?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>
谢谢你的回复。是否有一种方法可以应用这些标记,使“i”标记之间的文本以斜体书写,“p”标记开始一个新段落?尝试了两种方法,但由于某些原因,格式没有应用。还有其他建议吗?我可能遗漏了其他内容,抱歉,我是XML新手。您是想在浏览器中运行XSLT还是通过独立处理器运行XSLT?我正在尝试在komodo的内置浏览器中运行,并再次感谢您的回复。我尝试了模板解决方案,但它仍然在一行中返回未格式化的文本。上面的IE截图正是我想要实现的,但在komodo和IE中尝试后,我得到了未格式化的文本。如果您有任何可能的解决方案,请发布它们。当IE找不到XSLT文件时,将出现未匹配的文本。答案更新了进一步的细节。
<?xml-stylesheet type='text/xsl' href='tour.xsl'?>
<?xml-stylesheet type='text/xsl' href='tour_CANNOT_FIND.xsl'?>
<?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>
<?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>