好吧,这就是我的问题。我需要在 Java 中生成 xml 以传递到另一个应用程序。我开始认为使用 org.w3c.dom.Document 会很容易。不幸的是,我需要传递 XML 的应用程序要求像“这样的特殊字符需要编码为 ASCII (") 而不是它们的字符实体 (")。有人知道对此的简单解决方案吗?
附注更改目标应用程序不是一种选择。
更新: 假设我的应用程序被赋予以下字符串作为输入:
he will "x" this if needed
我的应用程序需要输出以下内容:
<field value="he will "x" this if needed"/>
我正在使用的 XML 生成器,我猜大多数其他生成器都会输出这个,但这对我的目标无效:
<field value="he will "x" this if needed"/>
我意识到我的目标可能不太符合 XML 标准,但这对我没有帮助,因为我无法控制它。这就是我的处境,我必须面对它。除了简单地手动转换每个特殊字符之外,还有什么想法吗?
最佳答案
我想知道如何将 XML 序列化为字符串、流等。您可以对输出进行后处理,将一般实体引用替换为其数字等效项,例如,
sed 's/</\</g; s/>/\>/g; s/&/\&/g; s/'/\'/g; s/"/\"/g'
或
xmlResultString.replaceAll("<", "<"); //etc. for other entities
XML 中有 5 个预定义的通用实体 ( http://www.w3.org/TR/REC-xml/#sec-predefined-ent ),您可以安全地将其作为文本替换执行。除了引用之外,它不会修改任何内容(好吧,也许在注释和 PI 中,但听起来您的场景并不使用它们,或者目标甚至不接受它们)。
我同意 Mark 的观点,即您的目标应用程序不是符合标准的 XML 处理器。至少它附带的文档明确说明了它与 XML 的不同之处。我相信该建议(上面的链接)不同意克里斯托弗的评论,尽管这与OP的问题无关,因为他的目标声明不遵守该建议。
阿里。
关于java - 使用 ascii 编码而不是字符实体对 xml 进行编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2158315/