假设我有以下XML,我只关心FruitId,客户Numbereaten和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>
上述适当的XSLT是什么?我尝试了以下方法,但它没有用。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text" encoding="ISO-8859-1" />
<xsl:variable name="newline" select="'
'"/>
<xsl:template match="Fruit">
<xsl:for-each select="Customer">
<xsl:value-of select="preceding-sibling::FruitId" />
<xsl:text>,</xsl:text>
<xsl:value-of select="Numbereaten" />
<xsl:text>,</xsl:text>
<xsl:value-of select="Weight" />
<xsl:value-of select="$newline" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
要尝试测试XSLT,我使用以下Java代码:
Source xmlSource = new StreamSource(new File("xmlFile"));
Source xsltSource = new StreamSource(new File("xsltFile"));
Transformer transformer = TransformerFactory.newInstance().newTransformer(xsltSource);
transformer.transform(xmlSource, new StreamResult(System.out));
我得到的只是将XML输出到控制台......不是我想要的格式:
Bannana, 5, 2.6
Bannana, 8, 5
...
Apple 6, 5
Apple 3, 2
如果我要做的事情不起作用,除了XSLT之外还有其他更好的方法让我知道。感觉这样的事情应该很简单。
答案 0 :(得分:2)
如果你想摆脱空行,只需在行
之后添加你的XSLT文件<xsl:variable name="newline" select="'
'"/>
这一行
<xsl:strip-space elements="*" />
答案 1 :(得分:1)
您实际上正在进行copy
转换,即没有应用样式表转换。这就是为什么您只是将源XML文件的内容视为控制台上的输出的原因。
要获取样式表,您需要在获取Transformer
Source stylesource = new StreamSource(new File("/path/to/your/stylesheet.xsl"));
Transformer transformer = TransformerFactory.newInstance().newTransformer(stylesource);
XSLT输出:
Bannana,5,2.6
Bannana,8,5.0
Apple,2,1.5
Pear,1,6
Pear,9,10
Pear,2,5.6
答案 2 :(得分:0)
您的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);