gpt4 book ai didi

java - Xalan with Java 6 会跳过注释吗?

转载 作者:行者123 更新时间:2023-11-29 05:25:04 26 4
gpt4 key购买 nike

在我看来,JDK 6(和 7)附带的 Xalan 版本不处理输入文件中的注释,如 <xsl:template match="comment()" ...>... 所指定的那样。

给定以下输入文件,dangling.xml

<?xml version="1.0" ?>
<dangling xmlns:dt="urn:uuid:e2973380-8daf-11e3-a5d8-0002a5d5c51b">
<!-- This is a comment. -->
<foobar x="y">A bar where I drink foo beer,
after debugging XSLT in hell all day.</foobar>
</dangling>

和样式表 identity_sans_dt.xsl

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dt="urn:uuid:e2973380-8daf-11e3-a5d8-0002a5d5c51b">


<xsl:output method="xml"
encoding="UTF-8"
indent="yes"
omit-xml-declaration="yes"
/>

<xsl:template match="/ | attribute::* | comment()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

我使用 libxml 的 xsltproc 得到以下输出

<dangling>
<!-- This is a comment. -->
<foobar x="y">A bar where I drink foo beer,
after debugging XSLT in hell all day.</foobar>
</dangling>

但是,当我通过使用 SAX TransformerHandler 应用相同样式表的 Java 程序运行相同的东西时,我明白了。

<dangling>

<foobar x="y">A bar where I drink foo beer,
after debugging XSLT in hell all day.</foobar>
</dangling>

我是否做错了什么导致技术规范委婉地称之为“不可预测的结果”?或者是否似乎有一个 Xalan 错误导致 Java 版本中的注释被遗漏?

虽然与 comment() 处理的问题没有直接关系,但这是本练习的背景。 dangling.xml 是一些先前处理的结果,这些处理删除了 dt 命名空间中的所有元素及其子元素。由于某种原因,dt namespace 声明被遗留下来。此外,xml 声明引起了一些问题。 (这是因为某些下游代码将其作为字符串进行操作,然后将其放入另一个 XML 文本字符串的中间。别费心告诉我这有多可怕;我知道。别费心告诉那些负责的人说代码;我已经。)所以我花了过多的时间试图摆脱这两个烦人的工件,但保留其他所有东西。

不,dangling.xml 不是真正的文件,只是用于调试的代理。 :-)

因此,如果有一种完全更好的方法可以回避整个问题,我也有兴趣了解它。

提前谢谢你。

最佳答案

可能是你运行的不正确。在 SAX 中,XMLReader 将大多数解析事件通知给注册的 ContentHandler,但不通知发送给注册的 LexicalHandler 的注释。 JAXP TransformerHandler 实现了 ContentHandler 和 LexicalHandler 接口(interface),但只有在它作为 ContentHandler 和 LexicalHandler 注册到 XMLReader 时才会收到评论通知。

关于java - Xalan with Java 6 会跳过注释吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22999870/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com