我有以下示例xml
<employee>
<description>Age:26</description>
<description>Height:6.0</description>
<description>Weight:180</description>
<description>HairColor:Black</description>
</employee>
<employee>
<description>Degree:BS</description>
<description>Experience:4 years</description>
<description>HairColor:Black</description>
</employee>
我无法控制xml,并且这些元素是可选的,并且由不同代理商报告并合并到一个xml中。我需要解析它,我正在使用XPath和DOM解析器。我可以通过以下代码打印Description标签,其中nList是Employee节点列表
private static void getChargeDescription(NodeList nList) {
for (int i = 0; i < nList.getLength(); i++) {
//get employee node
Node nNode = nList.item(i);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
NodeList descriptionNodes = eElement.getElementsByTagName("description");
for(int j = 0; j < descriptionNodes.getLength(); j++) {
System.out.println(descriptionNodes.item(j).getTextContent());
}
}
}
}
我的问题是如何设置以下类的属性。
public class Employee {
private List<String> Height;
private List<String> Weight;
private List<String> Experience;
private List<String> HairColor;
private List<String> Age;
private List<String> Degree;
//getters and setters
}
因为元素描述的名称将相同,并且每个代理商可以报告不同数量的描述,并且多个Employee元素之间可以有相同的描述。因此,我能想到的唯一方法是获取文本内容并确定它是什么类型的信息。还有其他方法吗?
答案 0 :(得分:0)
从您的Employee
对象看来,您知道属性名称(年龄,学位等)。您可以使用XPath迭代这些名称并获取包含该属性的所有元素,然后构建您的列表
使用xmllint
命令行实用程序
xmllint --xpath '//description[starts-with(text(),"Age")]' test.xml
<description>Age:26</description>
NodeList descriptionNodes
将仅包含上述示例中的请求属性Age
。你可以有2个for循环,属性名称的外部和当前NodeList的内部。