我需要一个简单的例子,如何用Java DOM解析器和Apache JxPath解析XML文件。我知道DOM解析器技术,但现在我正在尝试将JxPath集成到我的源代码中。
我在网络上搜索过,但找不到工作示例。
测试我得到了这个xml:
File file = new File("Files/catalog.xml");
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
try
{
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(file);
NodeList nList = doc.getElementsByTagName("cd");
for(int j = 0; j<nList.getLength(); j++){
Element element = (Element)nList.item(j);
System.out.println(element.getElementsByTagName("artist").item(0).getTextContent() + "\n");
}
}
catch (ParserConfigurationException | SAXException | IOException e)
{
e.printStackTrace();
}
Java代码:
public @Bean MongoClient mongo() {
MongoClientOptions.Builder options = MongoClientOptions.builder().sslEnabled(true);
// add more options to the builder with your config
MongoClient mongoClient = new MongoClient("localhost", options.build());
return mongoClient;
}
我已阅读过类 Container,DocumentContainer和JXPathContext ,但是 我将非常感谢一些帮助,或者对具有特定工作示例的Web源感激不尽。
答案 0 :(得分:2)
以下是与您的工作类似的例子。
File file = new File("Files/catalog.xml");
DocumentContainer dc = new DocumentContainer(file.toURI().toURL());
JXPathContext ctx = JXPathContext.newContext(dc);
Iterator iter = ctx.iterate("//cd/artist");
//In this case, following API will return DOM object
//Iterator iter = ctx.selectNodes("//cd/artist").iterator();
while (iter.hasNext()) {
System.out.println(iter.next());//object type is String
}
答案 1 :(得分:1)
您确定JXPath是您需要的吗? JXPath是一个Apache库,可以在不一定是XML的东西上使用XPath表达式,比如Java对象树或映射。如果您已经从XML创建了DOM,那么您也可以在其上使用默认的Java XPath实现。见这里:https://docs.oracle.com/javase/7/docs/api/javax/xml/xpath/XPathFactory.html。实际上,JXpath在这里会对你不利,因为DOM有一个对象树,如Element
和Text
,其元数据就像元素名称一样。因此,不是像//cd/artist
这样的表达式,而是获得类似//*[@tagName='cd']/childNodes[@tagName='artist']
的内容。
现在,如果你出于某种原因必须能够在可能是Java对象树或DOM的东西上使用XPath表达式而不事先了解它,那么JXPath将是一个很好的用途 - beckyang在答案中描述的方式:使用JXPath DocumentContainer访问文档。
答案 2 :(得分:0)
是的,我从几个小时开始阅读JxPath,现在我理解了这个API的逻辑
非常感谢答案。这里有一些代码来自我
public class Main {
private final static Logger log = Logger.getLogger(Main.class);
public static void main(String[] args) {
PropertyConfigurator.configure("log4j.properties");
File file = new File("students.xml");
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
try
{
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(file);
NodeList nList = doc.getElementsByTagName("cd");
for(int j = 0; j<nList.getLength(); j++){
Element element = (Element)nList.item(j);
JXPathContext context = JXPathContext.newContext(element);
log.debug(context.getValue("company/address/city[2]"));
}
}
catch (ParserConfigurationException | SAXException | IOException e)
{
e.printStackTrace();
}
}