【问题标题】:XSLT can't handle entityXSLT 无法处理实体
【发布时间】:2015-01-16 14:26:16
【问题描述】:

我有一个 XML-String,我正在尝试删除所有空的 XML-Tags 和空格。 为此,我正在使用以下 XSL 表:

<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>

我的输入字符串 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;amp; 时,编译器认为您正在尝试引用实体。如果您只是想添加字符,则只需添加 &amp;amp;
  • 不要尝试使用字符串连接构建 XML,使用 JDOM 或 DOM 或类似的,这样您就不会遇到格式错误的 XML 问题,从而导致稍后在应用程序期望的工具链中出现错误XML。

标签: java xml xslt


【解决方案1】:

& 符号 (&amp;amp;) 本身不是合法字符,您必须将其编码为 &amp;amp;

来自XML Specification

& 符号 (&) 和左尖括号 (&amp; 和 &amp;lt; 对其进行转义。

【讨论】:

  • 谢谢。您对创建 XML-String 后的编码有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-21
  • 2021-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-24
  • 1970-01-01
相关资源
最近更新 更多