java使用digester检索XML的名称空间值
我试图从一个XML文件中提取信息,并且能够在没有属性的情况下提取值
代码:
public class NRusEntity {
private String code;
private String name;
private String saltForm;
getters and setters
...
解析器类:
...
String filePath = FileUtility.getOwlFilePath();
try {
Digester digester = new Digester();
digester.setValidating(false);
//digester.setNamespaceAware(true);
digester.addObjectCreate("rdf:RDF", NRus.class);
digester.addObjectCreate("rdf:RDF/owl:Class", NRusEntity.class);
digester.addCallMethod("rdf:RDF/owl:Class/Preferred_Name", "setName", 0);
digester.addCallMethod("rdf:RDF/owl:Class/code", "setCode", 0);
/**This commented part creates exception*/
//digester.addCallMethod("rdf:RDF/owl:Class/Has_Salt_Form", "setSaltForm", 2);
//digester.addCallParam("rdf:RDF/owl:Class/Has_Salt_Form", 0);
//digester.addCallParam("rdf:RDF/owl:Class/Has_Salt_Form", 1, "rdf:resource");
digester.addSetNext("rdf:RDF/owl:Class", "addEntry");
File input = new File(filePath);
digester.parse(input);
}
...
XML如下所示:
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:owl="http://www.w3.org/2002/07/owl#">
<owl:Class rdf:about="#z">
<Preferred_Name rdf:datatype="http://www.w3.org/2001/XMLSchema#string">von</Preferred_Name>
<code rdf:datatype="http://www.w3.org/2001/XMLSchema#string">XY221</code>
<Has_Format rdf:resource="http://zlib.com#Ni_Hydro"/>
</owl:Class>
...
</rdf:RDF>
如何提取URI值
"http://zlib.com#Ni_Hydro"
从那个XML行
<Has_Format rdf:resource="http://zlib.com#Ni_Hydro"/>
# 1 楼答案
我不能确切地说,您的XML似乎与您的代码不太匹配:注释掉的代码引用了
Has_Salt_Form
元素,但rdf:resource
元素出现在Has_Format
元素上。然而,我可以看到一个可能帮助你进步的潜在问题:我假设你的
NRusEntity
类设置器是这样的:但是,您拥有的消化器代码是:
这是在寻找一个带有两个参数的
setSaltForm
方法(第一个是元素体,第二个是rdf:resource
属性),因此它与简单的setter不匹配,在异常消息中会出现类似“no-somed method”的内容因此,如果需要正文内容,请尝试添加另一套方法:
或者,如果你不需要这些内容,那么就把它从消化器规则中删除:
如果这两项工作都无法添加您正在使用的消化器版本的详细信息,以及您得到的例外情况