有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中读取具有多个属性的XML文件

这是我正在处理的XML文件:

<book>
    <chapter index="1" name="Chapter 2">
        <verse index="1" text="First Line" />
        <verse index="2" text="Second Line" />
        <verse index="3" text="Third Line" />
    </chapter>
    <chapter index="1" name="Chapter 2">
        <verse index="1" text="First Line" />
        <verse index="2" text="Second Line" />
        <verse index="3" text="Third Line" />
    </chapter>
</book>

这就是我拼命尝试的,下面是我贴出的答案:How can I read Xml attributes using Java?

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;


public class Main
{
    public static void main (String[] args)
    {
        try
        {
            File fXmlFile = new File("book.xml");
             DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
             DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
             Document doc = dBuilder.parse(fXmlFile);
             doc.getDocumentElement().normalize();

             System.out.println("Verse: " +
                     doc.getDocumentElement().getElementsByTagName("chapter").item(0).getChildNodes().item(0).getAttributes().getNamedItem("text").getNodeValue());

        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
    }
}

我试图打印每章的第一节,但出现了空指针异常


共 (1) 个答案

  1. # 1 楼答案

    您可以选择使用dom4j的可能性。这很直截了当

    直接从dom4j

       public void treeWalk(Document document) {
            treeWalk( document.getRootElement() );
        }
    
        public void treeWalk(Element element) {
            for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
                Node node = element.node(i);
                if ( node instanceof Element ) {
                    treeWalk( (Element) node );
                }
                else {
                    // do something....
                }
            }
        }
    

    然后,您只需通过添加以下条件来选择属性:

     ....
     if ( node instanceof Element ) {
        //condition goes here:: e.g.
        if(node.getParent().getName().equals("chapter") && node.getName().equals("verse"){
           if (node.attribute("index").getData().toString().equals("1"))
              System.out.println(node.attribute(text).getDate().toString());
        }
        treeWalk( (Element) node );
     }
    

    输出:

    First Line
    First Line