java - 使用 Java 查询 XML

标签 java xml xpath netbeans

我能够使用 Java 对 XML 文档运行简单的查询,但我希望运行更“高级”的查询,但在这样做时遇到了一些麻烦。

当我想获取 XML 文件中其余 Actor 的姓名时,我只能获取此示例中第一个 Actor 的姓名(在本例中为马龙·白兰度)。

到目前为止,我已经使用了 /film/cast,它显示了所有 Actor 的名字,以及他们在电影中扮演的角色;这是我不想要的。

请帮忙! 谢谢

XML:

    <!--?xml version="1.0"?-->
<film>
    <title>"Godfather, The"</title>
    <year>1972</year>
    <directors>
        <director>Francis Ford Coppola</director>
    </directors>
    <genres>
        <genre>Crime</genre>
        <genre>Drama</genre>
    </genres>
    <plot>Son of a mafia boss takes over when his father is critically wounded in a mob hit.</plot>
    <cast>
        <performer>
            <actor>Marlon Brando</actor>
            <role>Don Vito Corleone</role>
        </performer>
        <performer>
            <actor>Al Pacino</actor>
            <role>Michael Corleone</role>
        </performer>
        <performer>
            <actor>Diane Keaton</actor>
            <role>Kay Adams Corleone</role>
        </performer>
        <performer>
            <actor>Robert Duvall</actor>
            <role>Tom Hagen</role>
        </performer>
        <performer>
            <actor>James Caan</actor>
            <role>Sonny Corleone</role>
        </performer>
    </cast>
</film>

Java 类:

pa

ckage Film;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.xml.sax.SAXException;

public class ASS2_FILM{
    public static void main(String[] args) {

        try {
            FileInputStream file = new FileInputStream (new File("/Users/benchalmers/Documents/Uni /Year 2/Database Engineering/Assignment 3/Film/FILM.xml"));

            DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();

            DocumentBuilder builder =  builderFactory.newDocumentBuilder();

            Document xmlDocument = builder.parse(file);

            XPath xPath =  XPathFactory.newInstance().newXPath();

String expression3 = "/film/cast/";
            System.out.println(expression3);
            String actor = xPath.compile(expression3).evaluate(xmlDocument);
            System.out.println(actor);

返回值:

/film/cast


            Marlon Brando
            Don Vito Corleone


            Al Pacino
            Michael Corleone


            Diane Keaton
            Kay Adams Corleone


            Robert Duvall
            Tom Hagen


            James Caan
            Sonny Corleone

最佳答案

要获取 Actor 姓名,只需尝试更改:

String expression3 = "/film/cast/";

致:

String expression3 = "/film/cast/performer/actor";

关于java - 使用 Java 查询 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36516324/

相关文章:

java - 将 EJB3 注入(inject)基于注释的 JSF2 支持 bean 导致 javax.naming.NameNotFoundException :

java - java错误,找不到符号

java - 无法获取 xml 文件中名称为 ="debitRequest"的父节点的子节点名称

sql - 在 SQL Server 中合并两个 XML 列

java - 撒克逊 XSLT。扩展函数只调用一次

c# - HtmlAgilityPack 选择的子节点不符合预期

java - 如何证明在项目中使用脚本语言是合理的

java - 如何拆分字符串而不丢失任何单词?

c# - 不使用 XML 解析器从 XML 文档中提取数据

java - 'UnexpectedTagNameException' 和 Element 应该是 "select",但通过 Selenium java 使用 "div"函数却出现 'Select' 错误