使用JDOM留下重复的名称空间声明

时间:2012-05-15 08:54:24

标签: xml namespaces xml-parsing sax jdom

我正在尝试读取现有的xml文件,该文件具有重复的命名空间声明。留下这些声明以便进一步处理对我来说很重要。之前我使用org.w3c.dom api的XERCES实现来读取这样的文档,并且所有声明都留下了,但是当我开始使用JDOM时,它开始省略冗余的名称空间声明。

以下是示例xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<document xmlns:ns="namespace_uri">
  <element1>...</element1>
  <element2>
    <ns:child>
      text
    </ns:child>
  <element3 xmlns:ns="namespace_uri">
    <ns:child>
      content
    </ns:child>
  </element3>
</document>

我正在使用以下代码构建JDOM Document:

SAXBuilder builder = new SAXBuilder();
File inputXml = new File(inputFile);
jdomInDoc = builder.build(inputXml);

有没有办法强制JDOM不要省略冗余的命名空间声明?

提前感谢您的答案。

2 个答案:

答案 0 :(得分:0)

目前,JDOM无法保留冗余命名空间声明。如果您愿意,甚至可能会覆盖XMLOutputter以输出重复项。我可以看一下。

我已打开问题83 https://github.com/hunterhacker/jdom/issues/83

这可能会添加到JDOM格式系统

无论如何,我将在JDOM中查看是否可以进行自定义...

答案 1 :(得分:0)

根据冗余命名空间声明是否存在,将使用哪种软件接收此XML并对其进行不同的处理?同样的软件,如果它们用单引号分隔,只会处理属性,或者只包含在CDATA部分中的文本处理?

像Xerces或JDOM这样的通用XML软件有权假设收件人是一个表现良好的XML使用者,这意味着它不会附加词汇XML表示的意外,例如引号的选择,使用CDATA,或存在冗余的命名空间绑定。