我目前正在尝试从Java中的epub中提取标记元素< dc:title >
。但是,我尝试使用
doc.getDocumentElement().getElementsByTagName("dc:title"));
它只显示2nd element :com.sun.org.apache.xerces.internal.dom.DeepNodeListImpl
。我想知道如何提取< dc:tittle >
?
这是我的代码:
File fXmlFile = new File("file directory");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
System.out.println("1st element :" + doc.getElementsByTagName("dc");
System.out.println("2nd element :" + doc.getDocumentElement().getElementsByTagName("dc:title"));
系统输出:
1st element : com.sun.org.apache.xerces.internal.dom.DeepNodeListImpl@4f53e9be
2nd element :com.sun.org.apache.xerces.internal.dom.DeepNodeListImpl@e16e1a2
添加了样本数据
<dc:title>
<![CDATA[someData]]>
</dc:title>
<dc:creator>
<![CDATA[someData]>
</dc:creator>
<dc:language>someData</dc:language>
答案 0 :(得分:0)
方法getElementsByTagName(String)
返回匹配元素列表(注意复数&#39; s&#39;)。然后,您需要指定要使用的元素(例如,使用.item(index)
访问Node实例)。因此,您可以在getNodeValue()
对象上使用Node
。
编辑:因为CDATA元素,而是使用Node.getTextContent()
:
NodeList elems = doc.getElementsByTagName("dc:title");
Node item = elems.item(0);
System.out.println(item.getTextContent());
答案 1 :(得分:-1)
我建议使用xpath来获得所需的输出。 另外,请参阅以下链接以获取示例。 https://www.journaldev.com/1194/java-xpath-example-tutorial 例如:
XPath xPath = XPathFactory.newInstance().newXPath();
String expression = "//dc:title/text()";
NodeList nodes = (NodeList) xPath.compile(expression).evaluate(doc, XPathConstants.NODESET);
System.out.println(nodes.item(0).getNodeValue());