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

时间:2018-01-22 07:40:49

标签: java epub

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

2 个答案:

答案 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());