2012-03-02 71 views
1

任何人都可以幫助我嗎?使用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 

在此先感謝。

+1

您應該嘗試確定問題出在您的XSL或Java代碼上。嘗試使用工具或命令行處理器將XSL應用於XML。 – Andy 2012-03-02 15:03:32

回答

2

這不是XSLT問題

當我申請所提供的改造提供的XML文檔,我得到什麼似乎是想要的結果:

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

因此,你需要找到調用轉換在Java代碼中的問題,然後輸出結果。

+0

感謝您的回覆。 – 2012-03-03 09:29:04

+0

@Dekkaria:不客氣。 – 2012-03-03 15:15:27

0

您的java實際上將您的xsl作爲源XML文檔傳遞。

相信的Java代碼的倒數第二行應爲:

transformer.transform(source, result); 

因爲它是在此刻,source變量從未被實際使用。