如何从 java 中的 <dc> 标签中提取数据?

How to extract data from <dc> tag in java?

我目前正在尝试从 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>

方法getElementsByTagName(String)是return一个匹配元素列表(注意复数's')。然后您需要指定要使用的元素(例如通过使用 .item(index) 访问 Node 实例)。因此,您可以在该 Node 对象上使用 getNodeValue()

已编辑:由于 CDATA 元素,而是使用 Node.getTextContent():

NodeList elems = doc.getElementsByTagName("dc:title");
Node item = elems.item(0);
System.out.println(item.getTextContent());

我建议使用 xpath 来获得所需的输出。 另外,请参考以下 link 的示例。 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());