我想使用javax.xml.transform將XML轉換爲文本。 xsltproc的會正確地改變我的XML格式正確的文本,而下面的代碼產生的輸出與幾乎所有的空格去掉:javax.xml.transform.Transformer刪除需要的空白(xml到文本轉換)
final ByteArrayOutputStream out = new ByteArrayOutputStream();
final InputStream is = getClass().getResourceAsStream(xslResourceName);
final StreamSource xsltSrc = new StreamSource(is);
final Transformer transformer = tFactory.newTransformer(xsltSrc);
final Source src = new StreamSource(new StringReader(xmlData));
final Result res = new StreamResult(out);
transformer.setOutputProperty("method", "text");
transformer.setOutputProperty("omit-xml-declaration", "yes");
transformer.transform(src, res);
return out.toString();
的空間將被故意用XSLT添加,使用標記,如:
<xsl:value-of select="substring(concat(concat($frontpadding,$cellvalue),$blank),1,$width)"/>
對於較大的示例中,源XML可能具有:
<reportheader display="true">
<name>Hours01</name>
<date>2011-04-14</date>
<description>Hours Report</description>
<pagewidth>130</pagewidth>
</reportheader>
在xsl具有:
<xsl:template match="reportheader">
<xsl:if test="@display='true'">
<xsl:variable name="col1width" select="12"/>
<xsl:variable name="datewidth" select="10"/>
<xsl:variable name="col2width" select="$pagewidth - $col1width - $datewidth"/>
<xsl:copy-of select="substring(concat(name,$blank),1,$col1width)"/>
<xsl:copy-of select="substring(concat(description,$blank),1,$col2width)"/>
<xsl:copy-of select="substring(concat(date,$blank),1,$datewidth)"/>
<xsl:text>
</xsl:text>
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:template>
的xsltproc的輸出是:
Hours01 Hours Report 2011-04-14
而且javax.xml.transformer.Transformer輸出爲:
Hours01Hours Report2011-04-14
你想保留什麼空格?你能寫出一個你想要的變革的例子嗎? – Torres 2011-04-14 16:39:37
他將$ blank(大概是一長串空格)連接到每個字段,然後使用substring()創建所需長度的右填充字符串。他希望在輸出中保留這些尾部空格。 – 2011-04-14 17:23:48