簡體   English   中英

XSLT無法處理實體

[英]XSLT can't handle entity

我有一個XML字符串,並且我正在嘗試刪除所有空的XML標記和空格。 為此,我正在使用以下XSL-Sheet:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="*[not(*) and not(text()[normalize-space()])]"/>
</xsl:stylesheet>

我的輸入String XML例如:

String s = "<main>           <test>123öü aksdjf0192301ß09aasdfg   0</test>            <test> </test>  <test>12031</test>"

             + "\n" +

             "<test>" + "</test>" + "</main>";

對於XSL轉換,我使用以下Java代碼:

StringReader reader = new StringReader(xmlContent);
  StringWriter writer = new StringWriter();
  TransformerFactory tFactory = TransformerFactory.newInstance();
  Transformer transformer = tFactory.newTransformer(new javax.xml.transform.stream.StreamSource(
     "style.xsl"));
  transformer.transform(new javax.xml.transform.stream.StreamSource(reader),
     new javax.xml.transform.stream.StreamResult(writer));
  String result = writer.toString();

我的輸出是:

<?xml version="1.0" encoding="UTF-8"?><main><test>123öü aksdjf0192301ß09aasdfg   0</test><test>12031</test></main>

那正是我的預期結果,但是當我在輸入字符串中添加例如“&”的實體時,轉換將失敗。

錯誤: 實體名稱必須緊跟在實體引用中的“&”之后。

我該如何解決這個問題? XSL是正確的為什么要實現這樣的功能嗎?

我期望這個輸出:

 <?xml version="1.0" encoding="UTF-8"?><main><test>123öü aksdjf0192301ß09aasdfg   0</test><test>120>&& | 31</test></main>

使用此輸入:

 String s = "<main>           <test>123öü aksdjf0192301ß09aasdfg   0 >&& |  </test>            <test> </test>  <test>120>&& | 31</test>"

                 + "\n" +

                 "<test>" + "</test>" + "</main>";

&& )本身不是法律字符,您必須將其編碼為&amp;

XML規范

除用於標記分隔符時,或在注釋,處理指令或CDATA節中,“&”字符(&)和左尖括號(<)均不得以其文字形式出現。 如果在其他地方需要它們,則必須使用數字字符引用或字符串&amp;進行轉義&amp; &lt; 分別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM