我正在尝试解析XML字符串,并且标记名是可变的;我还没有看到任何关于如何在不知情的情况下提取信息的例子。例如,我将始终知道下面的<response>
和<data>
标记,但是它们内部/外部的标记可以是<employee>
到您命名的任何内容。
<?xml version="1.0" encoding="UTF-8"?>
<response>
<generic>
....
</generic>
<data>
<employee>
<name>Seagull</name>
<id>3674</id>
<age>34</age>
</employee>
<employee>
<name>Robin</name>
<id>3675</id>
<age>25</age>
</employee>
</data>
</response>
答案 0 :(得分:0)
您可以将其解析为通用dom对象并遍历它。例如,您可以使用dom4j执行此操作。
从dom4j快速入门指南:
public void treeWalk(Document document) {
treeWalk( document.getRootElement() );
}
public void treeWalk(Element element) {
for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
Node node = element.node(i);
if ( node instanceof Element ) {
treeWalk( (Element) node );
}
else {
// do something....
}
}
}
public Document parse(URL url) throws DocumentException {
SAXReader reader = new SAXReader();
Document document = reader.read(url);
return document;
}
答案 1 :(得分:0)
我在项目中看到了类似的情况。
如果要处理大型XML,可以使用Stax或Sax解析器来读取XML。在每个步骤(如到达end元素),将数据输入到您选择的Map或dta结构中,其中将标记名称作为键,将值保存为Map中的值。最后,一旦完成解析,使用此Map来确定要构建的对象,最后您将在XML中具有正确的信息实体表示
如果XML很小,请使用DOM并通过读取特定标记直接构建实体对象(如employee&gt;或使用XPATh到您希望标记存在的位置,为您提供实体的提示。直接通过从XML中读取特定信息。