3

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

现在我知道我可以构建自己的解析器(恐怕我必须部分或全部这样做),但我宁愿不这样做,因为它正在为一个该死的部分重新发明轮子。我可以强制它读取数据吗?就像将第二个的名称更改为“attribute1”?或者我可以忽略第二个标签吗?也许将这两条数据像“part1/part2”一样结合在一起?数据并不重要,但有些用户可能会错过它,我给出的继续使用旧系统的理由越少越好。

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

感谢您的时间。

4

3 回答 3

1

TagSoup 是要走的路,正如 42 位已经提出的那样,我很惊讶你没有让它工作。

这是一个下载链接: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);
  }
}
于 2013-08-18T11:22:27.060 回答
1

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

您可以将其XMLReader与 JAXPSAXParser或 JDOM 或 DOM4J 一起使用。

于 2013-08-06T10:07:21.277 回答
-1

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

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

于 2013-08-06T06:21:48.433 回答