对不起,我想问一下如何通过考虑标签名称及其属性来获取标签值。我使用XML来对lucene进行索引
这是XML
<?xml version="1.0" encoding="utf-8"?>
<Root xmlns:wb="http://www.worldbank.org">
<data>
<record>
<field name="Country or Area" key="ARB">Arab World</field>
<field name="Item" key="AG.AGR.TRAC.NO">Agricultural machinery, tractors</field>
<field name="Year">1961</field>
<field name="Value">73480</field>
</record>
</data>
</Root>
在早期项目中,我只使用这样的源获取标记值:
private String getTagValue(String tag, Element e) {
NodeList nlList = e.getElementsByTagName(tag).item(0).getChildNodes();
Node nValue = (Node) nlList.item(0);
return nValue.getNodeValue();
}
但是现在,我想要考虑它的属性,所以我必须定义什么标签和属性来获得正确的值。 谢谢你的回答
答案 0 :(得分:1)
为此目的使用xpath查询。首先创建一个类似于此的查询(例如,获取具有特定值的字段节点):
myQuery = xpath.compile("//field[@value=\"1234\"]");
然后通过在dom doc:
上运行查询来填充节点集Object nodeSet = myQuery.evaluate(doc, XPathConstants.NODESET);
答案 1 :(得分:0)
将getTagValue更改为
private static String getTagValue(NodeList list, String name) {
for (int i = 0; i < list.getLength(); i++) {
Element e = (Element) list.item(i);
if (e.getAttribute("name").equals(name)) {
return e.getTextContent();
}
}
return null;
}
public static void main(String[] args) throws Exception {
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder()
.parse(new File("1.xml"));
NodeList fields = doc.getElementsByTagName("field");
String country = getTagValue(fields, "Country or Area");
String year = getTagValue(fields, "Year");
}