我尝试更换这样的标签:
<node><br></node> -- > <node><br></node>
不幸的是,当xsl解析我实际得到的xml文件时
<br>
显示在页面上,而不是显示为标记。
答案 0 :(得分:1)
HTML不是XML,尽管它们看起来非常相似;在HTML中有四个无法用XML做的事情,所有这些都可以修改为符合XML:
<br>
至<br/>
等。<input type="checkbox" checked>
中的值。只需为它们指定一个与属性同名的值,即<input type="checkbox" checked="checked" />
。<b>A<i>B</b>C</i>
是合法的,这将使A粗体,斜体和B都粗体和斜体。您可以通过执行<b>A<i>B</i></b><i>C</i>
或<b>A</b><i><b>B</b>C</i>
。<
,>
,&
,"
,'
和unicode值(例如 
/  
)才是有效实体在XML中。默认情况下,您无法使用
或ø
或类似内容。要解决此问题,您需要在工作表顶部包含实体声明,例如<!ENTITY nbsp " ">
。XSLT无法处理HTML文件,除非它也是有效的XML。
作为一项规则,我总是将HTML写成符合XML标准,因为它使得所有XML工具都可用,并且没有理由不这样做。
用<br>
替换<br>
实际上将标签替换为类似于html的TEXT,而不是符合xml的标签。
答案 1 :(得分:1)
如果你想插入一个格式不正确的html,这可能是一种解决方法。 将未格式化的html放在xml中的注释中,然后从xsl中提取它。
XML的例子:
<Data>
<!--
<div>
not well-formed xml<br>
</div>
-->
</Data>
XSL的例子:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:template match="Data">
<html>
<body>
<xsl:value-of disable-output-escaping="yes" select="comment()"/>
</body>
</html>
</xsl:template>
<xsl:template match="text() | @*">
</xsl:template>
</xsl:stylesheet>
输出
<html>
<body>
<div>
not well-formed xml<br>
</div>
</body>
</html>
答案 2 :(得分:0)
将它们保留为<br/>
并编写适当的XSLT转换,将它们按原样映射到输出。
答案 3 :(得分:0)
您提供的文字:
<node><br></node>
不是格式良好的XML文档,不适合使用XSLT 1.0进行处理。
如果你有:
<node><br/></node>
然后简单地按原样输出<br/>
元素 - 然后它是一个有效的标记。
示例强>:
此转化:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="nodes">
<html>
<xsl:apply-templates/>
</html>
</xsl:template>
<xsl:template match="node">
<p>
<xsl:apply-templates/>
</p>
</xsl:template>
</xsl:stylesheet>
应用于此XML文档时:
<nodes>
<node>
1 <br/>
2 <br/>
3 <br/>
</node>
</nodes>
<强>产生强>:
<html>
<p>
1 <br>
2 <br>
3 <br></p>
</html>
,浏览器将其显示为:
1
2
3