Java 如何定义正确的XSLT?

Java 如何定义正确的XSLT?,java,xml,xslt,Java,Xml,Xslt,假设我有下面的XML,我只关心FruitId、CustomerNumberCreaten和Weight属性 <AllFruits xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- All fruits below. --> <Fruit> <FruitId>Bannana</FruitId> <FruitColor>Yellow</FruitColor

假设我有下面的XML,我只关心FruitId、CustomerNumberCreaten和Weight属性

<AllFruits xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- All fruits below. -->
<Fruit>
  <FruitId>Bannana</FruitId>
  <FruitColor>Yellow</FruitColor>
  <FruitShape>Moon</FruitShape>
  <Customer>
     <Name>Joe</Name>
     <Numbereaten>5</NumberEaten>
     <Weight>2.6</Weight>
  </Customer>
  <Customer>
     <Name>Mark</Name>
     <Numbereaten>8</NumberEaten>
     <Weight>5.0</Weight>
  </Customer>
</Fruit>
<Fruit>
  <FruitId>Apple</FruitId>
  <FruitColor>Red</FruitColor>
  <FruitShape>Circle</FruitShape>
  <Customer>
     <Name>Joe</Name>
     <Numbereaten>2</NumberEaten>
     <Weight>1.5</Weight>
  </Customer>
</Fruit>
<Fruit>
  <FruitId>Pear</FruitId>
  <FruitColor>Green</FruitColor>
  <FruitShape>Oval</FruitShape>
  <Customer>
     <Name>Mark</Name>
     <NumberEaten>1</NumberEaten>
     <Weight>6</Weight>
  </Customer>
  <Customer>
     <Name>Josh</Name>
     <NumberEaten>9</NumberEaten>
     <Weight>10</Weight>
  </Customer>
  <Customer>
     <Name>Willis</Name>
     <NumberEaten>2</NumberEaten>
     <Weight>5.6</Weight>
  </Customer>
</Fruit>
</AllFruits>
我得到的只是将XML输出到控制台。。。不是我想要的格式,比如:

Bannana, 5, 2.6
Bannana, 8, 5
...
Apple 6, 5
Apple 3, 2

如果我试图做的不起作用,如果有其他比XSLT更好的方法,请告诉我。感觉像这样的事情应该很简单。

您实际上正在进行
复制
转换,即没有应用样式表转换。这就是为什么您只是将源XML文件的内容视为控制台上的输出

要应用样式表,需要在获取
转换器的实例时对其进行设置

Source stylesource = new StreamSource(new File("/path/to/your/stylesheet.xsl"));
Transformer transformer = TransformerFactory.newInstance().newTransformer(stylesource);

XSLT输出:

Source xmlSource = new StreamSource(new File("xmlFile"));
Source xsltSource = new StreamSource(new File("xsltFile"));

TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(xsltSource);
transformer.transform(xmlSource, System.out);

您的
xslStream
在哪里使用

这样做:

Source xmlSource = new StreamSource(new File("xmlFile"));
Source xsltSource = new StreamSource(new File("xsltFile"));

TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(xsltSource);
transformer.transform(xmlSource, System.out);

如果您想去掉空行,只需在行之后添加XSLT文件

<xsl:variable name="newline" select="'&#xA;'"/> 

这条线

<xsl:strip-space elements="*" />


我只需要XSL来提取我需要的信息,以便它以类似“CSV”的格式输出。更新了具有预期输出的问题。在您的建议之后出现致命错误:[致命错误]Fruits.xslt:元素“xsl:stylesheet”的前缀“xsl”未绑定。错误:“无法编译样式表”致命错误:“无法编译样式表”:元素“xsl:stylesheet”的前缀“xsl”未绑定。请从输入xml(从)中删除
xmlns:xsl
,并且您的xml格式不正确。检查你的标签。他们不会在任何地方使用相同的案例。也要修复这个问题。修复了大小写并从输入文件中删除了xmlns:xsl,得到了相同的错误。。。。找不到元素“xsl:stylesheet”的前缀“xsl”。是否确实已将
xmlns
指定为
xmlns:xsl
,而不是
xmlns:xslt
指定为
?获取[致命错误]结果。xslt:元素“xsl:stylesheet”的前缀“xsl”未绑定。错误:“无法编译样式表”致命错误:“无法编译样式表”:元素“xsl:stylesheet”的前缀“xsl”未绑定。@Damasusi,您希望以什么格式输出?HTMLDOM或其他特别的东西?我希望以csv格式输出(类似于我问题中的格式)。以逗号分隔的“水果ID、编号、重量”。@Damasusi,你能发布你当前的xml输出吗?在你的帖子中做了更改后,我没有收到任何xml输出,只是上面提到的致命错误。你让它工作了吗?使用这个页面测试你的XSLT文件,你会看到它works@KnutHerrmann谢谢分享测试链接。非常有用。谢谢你的提示,非常有用。
<xsl:variable name="newline" select="'&#xA;'"/> 
<xsl:strip-space elements="*" />