[英]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>";
&
( &
)本身不是法律字符,您必須將其編碼為&
。
從XML規范 :
除用於標記分隔符時,或在注釋,處理指令或CDATA節中,“&”字符(&)和左尖括號(<)均不得以其文字形式出現。 如果在其他地方需要它們,則必須使用數字字符引用或字符串
&
進行轉義&
和<
分別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.