尝试读取具有重复属性的xml文件

时间:2013-08-06 06:13:32

标签: java xml

我正在尝试阅读的文件是不再受支持的旧版软件,我正在尝试通过它提供的XML格式选项提取数据并将其移植到我正在构建的更新版本中Java的。我遇到的问题并没有找到解决方案,其中一个元素具有不同数据的重复属性。

现在我知道我可以建立自己的解析器(而且我担心我不得不在部分或整体上做到这一点),但我宁愿不这样做,因为它正在为一个可恶的部分重新发明轮子。我可以强制它读取数据吗?比如将第二个名称改为“attribute1”?或者我可以忽略第二个标签?也许将这两个数据结合起来就像“part1 / part2”一样?数据并不重要,但有些用户可能会错过它,而且我给旧系统保留的原因越少越好。

理想情况下,我希望能够将数据发送回原始程序,以供那些不想更改的人使用,因此保持数据相同的任何选项都是最佳选择。

感谢您的时间。

3 个答案:

答案 0 :(得分:1)

您可以使用TagSoup。它有一个XMLReader实现,几乎可以接受你抛出的任何东西。在这种情况下,我怀疑它只是默默地删除其中一个属性。

您可以按原样使用XMLReader,与JAXP SAXParser一起使用,也可以与JDOM或DOM4J一起使用。

答案 1 :(得分:1)

TagSoup是可行的方式,正如已经提出的那样,我很惊讶你没有让它发挥作用。

这是一个导致下载的链接:http://ccil.org/~cowan/XML/tagsoup/

这是一个完整的例子(使用JDOM2)。输出显示属性a的第一次出现从结果中消失。

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import org.jdom2.Document;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.XMLOutputter;

public class ParseDuplicateAttributeWithTagSoup
{
  public static void main(String[] args) throws Exception
  {
    String nonWellformed = "<?xml version='1.0' encoding='UTF-8'?><x a='1' a='2'/>";
    InputStream is = new ByteArrayInputStream(nonWellformed.getBytes("UTF-8"));
    SAXBuilder parser = new SAXBuilder("org.ccil.cowan.tagsoup.Parser");
    Document doc = parser.build(is);
    new XMLOutputter().output(doc, System.out);
  }
}

答案 2 :(得分:-1)

您可以使用:http://www.jdom.org/docs/apidocs/org/jdom2/Element.html#getAttributes%28%29

Attribute对象将包含您要查找的键和值。