任何人都可以幫助我嗎?使用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組和序列NUMER到元件每組
Java代碼:
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
在此先感謝。
您應該嘗試確定問題出在您的XSL或Java代碼上。嘗試使用工具或命令行處理器將XSL應用於XML。 – Andy 2012-03-02 15:03:32