使用xpath和DOM解析器读取xml

拉格尔·拉曼(Raghul Raman)

我有以下示例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 
}

因为描述元素的名称将是相同的,并且每个代理商可以报告不同数量的描述,并且多个雇员元素中可以有相同的描述。因此,我唯一能想到的方法就是获取文本内容并确定其类型。还有其他办法吗?

路易斯·穆诺兹(Luis Munoz)

Employee对象看来,您知道属性名称(年龄,学位等)。您可以使用XPath迭代这些名称并获取包含该属性的所有元素,然后构造列表

使用xmllint命令行实用程序的XPath示例

xmllint --xpath '//description[starts-with(text(),"Age")]' test.xml

<description>Age:26</description>

NodeList descriptionNodes将仅包含所请求的属性,Age在上面的例子。您可能有2个for循环,外部是属性名称,内部是当前NodeList。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章