想要为getElementsByTagName()使用特殊值(*)

时间:2013-08-20 22:57:19

标签: java xml xml-parsing

我在指定标签时搜索了getElementsByTagName并获得了大量结果,但没有针对我的特定问题。

在文档中说

  

参数:

     

tagname - 要匹配的标记的名称。特殊值“*”   匹配所有标签。对于XML,tagname参数区分大小写,   否则它取决于标记语言的区分大小写   使用

我对此的理解是,如果我将参数设置为“setting”,它将返回带有设置标记的所有元素。这很好,但是,这两个陈述都给我错误,我不明白为什么?

NodeList nodeList = document.getElementsByTagName(*);

NodeList nodeList = document.getElementsByTagName("*");

我只是没有正确理解文档或?

第一个语句给出了语法错误,第二个语句给了我一个NullPointerException

public static void main(String args[]) throws Exception {

    String path = "path";
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document document = db.parse(path);
    NodeList nodeList = document.getElementsByTagName("setting");
    String value = null;
    if (nodeList.getLength() > 0 && nodeList.item(0).hasChildNodes()) {  
    for(int x=0, size= nodeList.getLength(); x<size; x++) {
        System.out.println(nodeList.item(x).getAttributes().getNamedItem("name").getNodeValue());
           value = nodeList.item(x).getFirstChild().getNodeValue();
            System.out.println(value);
    }
   }
}

}

1 个答案:

答案 0 :(得分:0)

您正在测试第一个元素是否有子元素,但您在循环中的代码假定所有元素都有子元素。你需要在循环内测试它。