【发布时间】:2021-10-13 07:56:40
【问题描述】:
我正在尝试使用 Java 解析以下 XML:
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
</book>
<book id="bk109">
<author>Kress, Peter</author>
<title>Paradox Lost</title>
<genre>Science Fiction</genre>
<price>6.95</price>
<publish_date>2006-11-02</publish_date>
</book>
<book id="bk110">
<author>O'Brien, Tim</author>
<title>Microsoft .NET: The Programming Bible</title>
<genre>Computer</genre>
<price>36.95</price>
<publish_date>2006-12-09</publish_date>
</book>
<book id="bk112">
<author>Galos, Mike</author>
<title>Visual Studio 7: A Comprehensive Guide</title>
<genre>Computer</genre>
<price>49.95</price>
<publish_date>2008-04-16</publish_date>
</book>
</catalog>
但我需要显示所有价格大于 10 且在 2005 年之后出版的书籍。我有类似的东西:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder()
Document document = builder.parse(new File("books.xml"));
document.getDocumentElement().normalize();
NodeList bookList = document.getElementsByTagName("book");
for(int i = 0; i <bookList.getLength(); i++) {
Node book1 = bookList.item(i);
if(book1.getNodeType() == Node.ELEMENT_NODE) {
Element bookElement = (Element) book1;
System.out.println("Book " +bookElement.getAttribute("id"));
System.out.println("Author : " +bookElement.getElementsByTagName("author").item(0).getTextContent());
//...
}
}
【问题讨论】:
-
我建议查看 XPath 或 XQuery 或 XSLT,路径为
/catalog/book[price > 10 and number(substring(publish_date, 1, 4)) > 2005]。