java - 使用 // 在节点集中迭代后代时出现意外结果
问题描述
在我使用标准 JDK 的简单 XSLT 转换中,使用 // 快捷方式时我得到了意想不到的结果。
package my.xslt.test;
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.transform.Templates;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
public class IssuePresenter {
public static void main(String[] args) throws Exception {
StringBuilder xslt = new StringBuilder();
xslt.append("<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform'");
xslt.append(" xmlns:exsl='http://exslt.org/common'");
xslt.append(" exclude-result-prefixes='exsl'");
xslt.append(" version='1.0'>");
xslt.append("<xsl:output indent='yes' omit-xml-declaration='yes'/>");
xslt.append("<xsl:variable name='tree'>");
xslt.append(" <entry level='0'>");
xslt.append(" <entry level='1'/>");
xslt.append(" </entry>");
xslt.append("</xsl:variable>");
xslt.append("<xsl:template match='/'>");
xslt.append(" <a><xsl:copy-of select='exsl:node-set($tree)//entry'/></a>");
xslt.append(" <b><xsl:copy-of select='exsl:node-set($tree)/descendant::entry'/></b>");
xslt.append("</xsl:template>");
xslt.append("</xsl:stylesheet>");
StringWriter writer = new StringWriter();
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Templates templates = transformerFactory.newTemplates(new StreamSource(new StringReader(xslt.toString())));
Transformer transformer = templates.newTransformer();
transformer.transform(new StreamSource(new StringReader("<document/>")), new StreamResult(writer));
System.out.println(writer);
}
}
我希望<a>
与<b>
. 是错误还是我错过了什么?
<a>
<entry level="1"/>
</a><b>
<entry level="0">
<entry level="1"/>
</entry>
<entry level="1"/>
</b>
解决方案
此问题已确认为 JDK 错误,可在此处跟踪https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8265134
推荐阅读
- html - 使css动画永远流畅循环
- java - 为什么字符串变量在 Java 中以大写“S”开头?
- haskell - (haskell 的新手)如果语句生成解析错误
- c++ - C++ 变量的定义,Basic/6 节
- python - 有人能解释一下这样的代码是什么样的以及它为什么起作用吗?
- jasmine - 尝试设置 Jasmine2HtmlReporter 时出现“语法错误”
- c# - Intellisense 不建议使用 MonoBehaviour 方法
- python - 如何从文本文件创建情节动画(例如 mpeg 电影),而不将它们单独保存到计算机?
- python-2.7 - 'TypeError: 'int' object is not callable' 相隔 5 秒比较读数时
- python - 如何绘制图表以获得二元结果的概率