Java - 检索第二个元素 xml 文档 - DOM

标签 java xml dom

如何在以下 xml-doc 中检索颜色元素及其属性

 <drawingobject>
    <oval x="240" y="325" width="15" height="15" filled="yes">
        <color r="0" g="255" b="255"></color>
    </oval>
</drawingobject>

椭圆形的 dtd 看起来像这样

 <!-- elementet oval -->
<!ELEMENT oval (color?)>
<!ATTLIST oval x CDATA #REQUIRED>
<!ATTLIST oval y CDATA #REQUIRED>
<!ATTLIST oval width CDATA #REQUIRED>
<!ATTLIST oval height CDATA #REQUIRED>
<!ATTLIST oval filled (yes | no) "no">

我可以检索元素“oval”及其属性,但不知道如何测试它是否包含颜色元素和 IF - 检索它。

这是代码

 private void parse() throws Exception {

    String docName = System.getProperty("user.home") + "/Desktop/" + "myxml.xml";
    File file = new File(docName);
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document document = db.parse(file); 
    NodeList nodeList = document.getElementsByTagName("oval");
    oval = new int[nodeList.getLength()][5];

    for(int i= 0; i < nodeList.getLength(); i++) {

        oval[i][0] = Integer.parseInt(nodeList.item(i).getAttributes().getNamedItem("x").getNodeValue());
        oval[i][1] = Integer.parseInt(nodeList.item(i).getAttributes().getNamedItem("y").getNodeValue());
        oval[i][2] = Integer.parseInt(nodeList.item(i).getAttributes().getNamedItem("width").getNodeValue());
        oval[i][3] = Integer.parseInt(nodeList.item(i).getAttributes().getNamedItem("height").getNodeValue());

        if (nodeList.item(i).getAttributes().getNamedItem("filled").getNodeValue().equals("yes")) {
            oval[i][4] = 1;
        } else {
            oval[i][4] = 0;
        }


       Element ovalNode = (Element) nodeList.item(i);
       NodeList colorNodes = ovalNode.getElementsByTagName("color");
       if(colorNodes.getLength() > 0) {
            System.out.println(colorNodes.item(i).getNodeName()); 
       }

    }

堆栈跟踪

 java.lang.NullPointerException
at test.parse(test.java:60)
at test.<init>(test.java:28)
at test.main(test.java:17)

System.out.println(colorNodes.item(i).getNodeName()); 位于第 60 行

最佳答案

与获取oval 元素的方法相同:使用Element.getElementsByTagName(String elementName)。您已经拥有要循环的 oval 元素,因此您只需在每个迭代元素上调用此方法即可:

for(int i= 0; i < nodeList.getLength(); i++) {
   ...

   Element ovalNode = (Element) nodeList.item(i);
   NodeList colorNodes = ovalNode.getElementsByTagName("color");
   if(colorNodes.getLength() > 0) {
        System.out.println(colorNodes.item(0).getNodeName());  // prints "color"
        ... // do something with the node
   }
}

关于Java - 检索第二个元素 xml 文档 - DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30491623/

相关文章:

c# - 如何使用正则表达式清理 XML 属性?

javascript - 无法从 XML 文件获取数据

python - 识别标签结构不同的分支

javascript - 如何使用 javascript 从列表中删除 <li>

java - 用户在我的java测验程序中选择错误答案后如何重复问题

java - 防止子窗口打开/运行时父窗口关闭

java - 无限的 'while loop'会不会消耗过多的资源

xml - 如何使用 XPath 和 Perl 检索属性

javascript - 如何遍历任何字母数组并为 DOM 中的每个字母制作动画

java - 随机化数字 1 到 100 的数组