当前位置: 首页 > 知识库问答 >
问题:

使用带Spring MVC的dom4j在xml元素中编码不正确

秦渝
2023-03-14

我创建了一个AbstractView,以便向浏览器输出一些XML,如下所示:

public abstract class AbstractXmlView extends AbstractView {

public AbstractXmlView() {
    setContentType("application/xml");
}

@Override
protected void renderMergedOutputModel(Map<String, Object> model,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {

    response.setCharacterEncoding("UTF-8");

    Document document = new DOMDocument();
    document.setXMLEncoding("UTF-8");

    buildXmlDocument(model, document, request, response);

    response.getOutputStream().print(document.asXML());
}

public abstract void buildXmlDocument(Map<String, Object> model,
        Document document, HttpServletRequest request,
        HttpServletResponse response) throws Exception;

如您所见,我的子类将定义buildXMLDocument方法,以填充实际交付给浏览器的XML文档,因此下面是一个简化的实现:

public class GetXmlContacts extends AbstractXmlView {

@Override
public void buildXmlDocument(Map<String, Object> model, Document document,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {

    Element node = document.addElement("node");
    node.setText ("I'm unicode áéíóú");
}

请注意元素节点中的文本字符串“I'm unicodeáèóú”。当我向服务器请求这个时,我得到一个UTF-8编码的HTTP响应(OK),XML定义说它是UTF-8,但是节点的文本将被编码为ISO-8859-1(这是我的猜测,因为当我用Firefox更改编码时,字符串看起来是OK的)。

那么,为什么dom4j在定义为UTF-8时将一个文字字符串作为ISO?我的代码有问题吗?谢啦

共有1个答案

岳承悦
2023-03-14

解决了的!因为dom4j、元素有一些bug。setText()不关心指定的编码和文档。asXML()将返回一个ISO字符串,因此我对该行进行了如下修改:

response.getOutputStream().write(document.asXML().getBytes("UTF-8"));

一切都很顺利。。

 类似资料:
  • 需要生成的XML文件: 为根元素“wrapper:mmsrmessage”添加了两个名称空间,它没有问题。下面是它的Java代码: 但是,当我为元素“header:apphdr”添加两个名称空间时,我会得到错误消息: 线程“main”org.dom4j中出现异常。IllegalAddexception:没有这样的名称空间前缀 这是我在StackOverflow的第一个问题。我希望我能得到一个答案:

  • 在使用VTD-XML解析包含特殊字符(如©的XML文档(UTF-8)时,我现在遇到了一个问题,即返回的元素片段(getElementFragment)不正确。 示例代码: 这将返回: 当更改标准字符集时。UTF_8转换为标准字符集。US\u ASCII它确实有效: 当输入文件是UTF-8文件时,这会导致不正确的行为。这可能是VTD-XML中的错误,还是我在这里做错了什么?

  • 我正在尝试创建包含另一个XML的XML文档,比如child。 首先,我有一个对象Foo,它有一些属性。我用这个函数序列化它: 在另一个我无法访问Foo类的类中,我需要用这个Foo字符串在xml文档中保存一些数据。所以我有另一个像这样的物体: 当我序列化这个Bar对象并像xml文档一样保存它时。对于FooString元素,我得到了类似的结果。 我明白这个超文本标记语言字符实体(

  • 问题内容: 我想发送一个ajax请求(通过Jquery,尽管我认为在这种情况下不相关),而不在Django中使用form元素。根据文档,我应该可以通过使用装饰器来做到这一点,但是我得到了。 我正在使用以下导入。 我没有找到有关的大量文档,因此我们将不胜感激。 顺便说一句,使用按预期方式工作。 提前致谢。 问题答案: 如果您在导入时遇到困难,它可能仅是1.4 alpha功能-我可以在树干上使用相同的

  • 问题内容: Python 3.2.5 x64 ElementTree 我有需要使用python格式化的数据。本质上,我具有包含元素和子元素的文件。我需要删除其中一些元素的子元素。我已经检查了先前的问题,但无法解决。到目前为止,我拥有的最好的功能只是删除了每个第二子元素。 样本数据: 我需要的输出看起来像: 我有一段时间没有写任何东西了,我的代码也没用。我可以解析文件,然后将其写入,但我无法正确处理

  • 问题内容: 我试图生成以下格式的xml: 我的查询如下: 我的查询没有完全产生记录标签,目前是 应该是 我尝试了所有可能性,但没有获得标签。谁能帮我解决这个问题。 问题答案: 我无法从xml显式获得预期的输出,相反,我使用了xml路径并获得了输出。这是我更新的查询 欢迎您发布明确使用xml的修复程序。