java - 如何使用 Xpath 正确地从 XML 传递对象

标签 java xml xpath

我将尝试描述我的问题。 我有下一个结构的 XML 文档(不要看俄语文本;没关系):

    <Books>
    <Book ganre="fantasy">
    <bookId>FD46</bookId>
    <bookName>Меч предназначения</bookName>
    <bookAuthor>Анджей Сапковский</bookAuthor>
    <bookYear>1994</bookYear>
    <bookAvailable>false</bookAvailable>
    </Book>
    <Book ganre="fantasy">
    <bookId>0RD7</bookId>
    <bookName>Башня ласточки</bookName>
    <bookAuthor>Анджей Сапковский</bookAuthor>
    <bookYear>1997</bookYear>
    <bookAvailable>false</bookAvailable>
    </Book>
    <Book ganre="action">
    <bookId>709F</bookId>
    <bookName>Автостопом по галактике</bookName>
    <bookAuthor>Дуглас Адамс</bookAuthor>
    <bookYear>1979</bookYear>
    <bookAvailable>false</bookAvailable>
    </Book>
    </Books>

尝试通过 bookID 查找元素在这个 Xpath 的帮助下

 FileInputStream fileInputStream = new FileInputStream("Test/Books.xml");
            DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();

            Document document = documentBuilder.parse(fileInputStream);

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

            Node node = (Node) xPath
                    .evaluate("//Book[bookId/text()='" + bookID + "']", document.getDocumentElement(), XPathConstants.NODE);

bookID - 这是用户输入(例如像这样)

Scanner sc = new Scanner(System.in, "cp866");
String bookID;
bookID = sc.nextLine();

所以想法是从我们在字符串 <bookName></bookName><bookAuthor></bookAuthor> 中找到的具有当前 ID 的这个对象从 xml 节点返回这样我就可以放入另一个 xml。

喜欢

String takenBookName = new XMLDocument(xml).xpath("/Books/Book/bookName/text").get(0); //it will doesnt work ;)

最佳答案

必须为你工作。

//Book[bookId/text()='709F']/bookName/text()

关于java - 如何使用 Xpath 正确地从 XML 传递对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32822481/

相关文章:

java - java获取dom4j中的属性值

java - 如何检查响应是否为 xml 格式而不是 HTML?

javascript - 使用 javascript 相对 xpath 到绝对 xpath

xslt - 使用xsl :for-each-group

Java 到 DB 连接异常

java - Java 中的抽象类和反射

android - 类似网格的 View 中的动态 CardView

java - Marionette 驱动程序无法访问异常

java - 交换数组中的两个元素

c# - 为什么System.Xml.XmlDocument上的XPath找不到相邻的文本和CData节点?