使用 java 将 xml 传输到 xsl 时未获得结果



有人能帮我吗?

XMLFile:

<dataXML>
    <Items>
        <itemLine>
            <lineNo>1</lineNo>
            <lineRefNo>001</lineRefNo>
            <lineDes>test1</lineDes>
        </itemLine>
        <itemLine>
            <lineNo>2</lineNo>
            <lineRefNo>001</lineRefNo>
            <lineDes>test2</lineDes>
        </itemLine>
        <itemLine>
            <lineNo>3</lineNo>
            <lineRefNo>002</lineRefNo>
            <lineDes>test3</lineDes>
        </itemLine>
        <itemLine>
            <lineNo>4</lineNo>
            <lineRefNo>002</lineRefNo>
            <lineDes>test4</lineDes>
        </itemLine>
        <itemLine>
            <lineNo>5</lineNo>
            <lineRefNo>002</lineRefNo>
            <lineDes>test5</lineDes>
        </itemLine>
        <itemLine>
            <lineNo>6</lineNo>
            <lineRefNo>003</lineRefNo>
            <lineDes>test6</lineDes>
        </itemLine>
    </Items>
</dataXML>

输入 xml 在 lineRefNo 节点上排序

XSL 文件:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="kItemsByRef" match="itemLine" use="lineRefNo"/>
<xsl:template match="itemLine[generate-id()=generate-id(key('kItemsByRef', lineRefNo)[1])]">
Header<xsl:for-each select="key('kItemsByRef', lineRefNo)">
LineNo: <xsl:value-of select="concat(position(), ',', lineRefNo)"/>
</xsl:for-each>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>

上面的xsl用于对lineRefNo进行分组,并将数字序列到每个组的元素

爪哇代码:

String xsltPath ="XslFilePath.xsl";     
Source source = new StreamSource("XMLFilePath.xml");
javax.xml.transform.Source xsl = new StreamSource(xsltPath);
StringWriter buffer = new StringWriter();
javax.xml.transform.Result result = new javax.xml.transform.stream.StreamResult(buffer);
javax.xml.transform.TransformerFactory factory = TransformerFactory.newInstance();
javax.xml.transform.Transformer transformer = factory.newTransformer(xsl);
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(xsl, result);
System.out.println(buffer.toString());

在这里,经过改造,我没有得到任何结果。

预期成果

Header
LineNo: 1,001,1
LineNo: 2,001,4
Header
LineNo: 1,002,3
LineNo: 2,002,2
LineNo: 3,002,5
Header
LineNo: 1,003,6

提前谢谢。

这不是 XSLT 问题

当我将提供的转换应用于提供的 XML 文档时,我得到的结果似乎是想要的:

Header
LineNo: 1,001
LineNo: 2,001
Header
LineNo: 1,002
LineNo: 2,002
LineNo: 3,002
Header
LineNo: 1,003

因此,您需要在调用转换然后输出结果的 Java 代码中找到问题。

你的java实际上是将xsl作为源XML文档传递的。

我相信你的java代码的倒数第二行应该读作:

transformer.transform(source, result);

目前,source变量从未实际使用过。

最新更新