java - 从 Java DOM 中的 XML 获取元素名称

标签 java xml dom

我想获取元素名称并打印XML中的数据,但不确定如何获取特定元素下的数据。

这是 XML 示例和我的代码。

   <mdb>
    <movies>
    <movie id="godfather">
      <title>The Godfather</title>
      <year>1972</year>
      <directors>
        <director idref="francisfordcoppola"/>
      </directors>
      <genres>
        <genre>Crime</genre>
        <genre>Drama</genre>
      </genres>
       <cast>
        <performer>
          <actor idref="marlonbrando"/>
          <role>Don Vito Corleone</role>
        </performer>
     </cast>
    </movie>
    </movies>

    <performer id="kimnovak">
      <name>Marilyn Pauline Novak</name>
      <dob>1933-02-13</dob>
      <pob>Chicago, Illinois, USA</pob>
      <actedin>
        <movie idref="vertigo"/>
      </actedin>
    </performer>
    </mdb>



try {
        File fXmlFile = new File(filename);
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(fXmlFile);

        NodeList nodes = doc.getElementsByTagName("movie");
         System.out.println("nodes length"+ nodes.getLength());
        for (int i = 0; i < nodes.getLength(); i++){
            Element element = (Element) nodes.item(i);
            NodeList name = element.getElementsByTagName("title");
            Element line = (Element) name.item(0);
            System.out.println(": " + line.getFirstChild().getTextContent());

我只想获取电影中的元素。但下面的代码也读取 <movie idref="vertigo"/>在执行者内部(如果我想获取内容,则会导致 Nullpointer 异常);我想知道是否有任何可能的方法来避免使用 DOM 读取性能下的内容?

NodeList nodes = doc.getElementsByTagName("movie");

第一部电影的最终输出应该是这样的

('godfather', 'The Godfather', '1972', 'Crime;Drama')

最佳答案

一种方法是从电影标签而不是电影标签开始读取。不确定这是否是您要找的东西!

NodeList nodes = doc.getElementsByTagName("movies");

Element element = (Element) nodes.item(0);
NodeList movieList = element.getElementsByTagName("movie");
for (int i = 0; i < movieList.getLength(); i++) {
    Element movieElement = (Element) movieList.item(i);
    System.out.println(movieElement.getAttributes().getNamedItem("id").getNodeValue());
    NodeList name = movieElement.getElementsByTagName("title");
    NodeList year = movieElement.getElementsByTagName("year");
    NodeList genres = movieElement.getElementsByTagName("genres");
    Element genreline = (Element) genres.item(0);

    System.out.println(name.item(0).getFirstChild().getTextContent());
    System.out.println(year.item(0).getFirstChild().getTextContent());
    System.out.println(genreline.getElementsByTagName("genre").item(0).getTextContent() 
               + ":" + genreline.getElementsByTagName("genre").item(1).getTextContent());
}

输出:

: godfather
: The Godfather
: 1972
: Crime:Drama

关于java - 从 Java DOM 中的 XML 获取元素名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14743088/

相关文章:

java - 结合 Querydsl-jpa 和 querydsl-sql 以及代码生成

xml - 定义 xml 的相等性

java - 类型为通用类型参数的 JAXB 编码字段

python - 如何使用 xml.dom 库在 python 中序列化 XML 文档

javascript - 使用 Twitter Bootstrap 时如何定位 DataTables TableTools 控件

php-casperjs 获取内部文本

java - 检查字符串变量中的值是否为正数值的 API 方法

java - 使用 PHP 将 Android 数据添加到 MySQL

java - 解决此代码中的 ClassCastException

c# - 无法在 C# 中反序列化 XML