提问人:Rahul 提问时间:6/21/2023 最后编辑:Rahul 更新时间:6/21/2023 访问量:70
在 xsl 转换过程中丢失或跳过的 XML 标记
XML tags missing or skipped during xsl transformation
问:
我们正在执行 xsl 转换以将 hexcode 实体转换为 mdash。我们还将 xml 中的所有内容转换为输出为 &。
这种转换按预期发生,但与此同时,一些实体被转义为,就像转换为一样,更多的实体和更多的实体的情况类似。&
'
's
§
此外,所有标记都从 xml 中跳过,只有内容在输出中呈现,标签被跳过。
前>
xsl 转换前的输入:-
<?xml version="1.0" encoding="UTF-8"?><name>abc<name>
xsl 转换后的输出:-
abc
以下是使用的 xsl:-
<xsl:stylesheet version='3.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:output method="xml" omit-xml-declaration="no" use-character-maps="mdash amp" />
<xsl:character-map name="mdash">
<xsl:output-character character="—" string="&mdash;" />
</xsl:character-map>
<xsl:character-map name="amp">
<xsl:output-character character="&" string="&" />
</xsl:character-map>
<xsl:mode on-no-match="shallow-copy"/>
</xsl:stylesheet>
转型就是这样发生的:-
TransformerFactory tfactory = new net.sf.saxon.TransformerFactoryImpl();
InputStream xsl_stream = new BufferedInputStream(new FileInputStream(xsl_path));
StreamSource xsl_source = new StreamSource(xsl_stream, xsl_path);
Transformer transformer = tfactory.newTransformer(xsl_source);
InputStream xml_inputsource = new BufferedInputStream(new FileInputStream(output_file));
StreamSource xmlSource = new StreamSource(xml_inputsource, output_file);
StreamResult xmlResult = new StreamResult(finalFile);
transformer.transform(xmlSource, xmlResult);
有没有办法在输出中保留 xml 标签并取消转义实体,即 应保留在 XML 转换之后。所有实体在转换后都应保持原样。'
'
答:
2赞
michael.hor257k
6/21/2023
#1
您的问题被标记为 和 ,这没有任何意义。saxon
xalan
如果您使用仅支持 XSLT 1.0 的 Xalan 来处理不包含模板的 XSLT 3.0 样式表,则结果将是根元素的字符串值 - 请参阅:https://www.w3.org/TR/1999/REC-xslt-19991116/#built-in-rule
评论
0赞
Rahul
6/21/2023
使用撒克逊人,因此从标签中删除了 Xalan。
1赞
Michael Kay
6/21/2023
#2
所有实体在转换后都应保持原样
这是无法实现的,因为实体和字符引用甚至在转换开始之前就被 XML 解析器扩展了。
最好的办法是用于转换要显示为实体引用的字符:xsl:character-map
<xsl:character-map name="specials">
<xsl:output-character character="—" string="&mdash;" />
<xsl:output-character character="§" string="&sect;" />
.. etc ..
</xsl:character-map>
我不知道你想通过输出 .这似乎被误导了。但老实说,我不太确定你想通过这些达到什么目的。告诉我们你想要什么输出是一回事,但真正的问题是为什么?&
&
评论