2012-03-02 70 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变量从未被实际使用。