2011-04-14 86 views
1

我想使用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>&#xa;</xsl:text> 
    <xsl:text>&#xa;</xsl:text> 
</xsl:if> 
</xsl:template> 

的xsltproc的輸出是:

Hours01  Hours Report                        2011-04-14 

而且javax.xml.transformer.Transformer輸出爲:

Hours01Hours Report2011-04-14 
+0

你想保留什麼空格?你能寫出一個你想要的變革的例子嗎? – Torres 2011-04-14 16:39:37

+0

他將$ blank(大概是一長串空格)連接到每個字段,然後使用substring()創建所需長度的右填充字符串。他希望在輸出中保留這些尾部空格。 – 2011-04-14 17:23:48

回答

1

你是如何定義$空白?當我做

<xsl:variable name="blank">         </xsl:variable> 

我得到了和你一樣的結果。但是,以下產生了您所期望的結果

<xsl:variable name="blank" select="'            '"/> 
+0

果然,由於某種原因xsltproc沒有問題<...> ...空格... <...>,但javax.xml呢。非常感謝。 – 2011-04-14 18:13:41

+0

@David Jaquay:Jave按照http://www.w3.org/TR/xslt#strip做正確的事情 – 2011-04-14 19:52:00

0

在xslt中嘗試使用xml字符作爲空格。

&#160; 

或者使用文本標籤..

<xsl:text> </xsl:text> 

我希望這有助於。