微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 // 在节点集中迭代后代时出现意外结果

如何解决使用 // 在节点集中迭代后代时出现意外结果

在我使用标准 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?