我有一个XML文件,结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<entry id="young_1">
<sense n="1">
<cit type="translation" lang="fr">
<quote>jeune</quote>
</cit>
<re type="phr">
<sense>
<cit type="translation" lang="fr">
<quote>un jeune homme</quote>
</cit>
</sense>
</re>
</sense>
<sense n="2">
<cit type="translation" lang="fr">
<quote>petits
<hi rend="i">mpl</hi>
</quote>
</sense>
</entry>
我需要使用JAVA解析它以获取quote
元素中包含属性cit
的每个type="translation"
值:
quote
元素的文本内容,但我不需要拥有直接节点的文本内容,例如<quote>petits <hi rend="i">mpl</hi></quote>
quote
元素中包含的re
元素的文本内容最后我需要获得这个结果:
entry ==> young_1
translations ==> [jeune;petits]
现在我的JAVA代码是:
//load xml document for DOM parsing
Document doc = loadXMLFromString(xmlContent);
//now try to parse it
NodeList nList = doc.getElementsByTagName("sense");
for (int i = 0; i < nList.getLength(); i++) {
Node nNode = nList.item(i);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
NodeList fieldNodes = eElement.getElementsByTagName("cit");
for(int j = 0; j < fieldNodes.getLength(); j++) {
Node fieldNode = fieldNodes.item(j);
NamedNodeMap attributes = fieldNode.getAttributes();
Node attr = attributes.getNamedItem("type");
if(attr != null) {
if(attr.getTextContent().equals("translation")) {
//how can I access <quote> element ???
}
}
}
}
}
但我不知道如何访问<quote>
...
答案 0 :(得分:1)
您可以完全按照访问<quote>
元素的方式访问<cit>
元素:使用Element#getElementsByTagName(String name)
方法:
Node attr = attributes.getNamedItem("type");
if (attr != null) {
if (attr.getTextContent().equals("translation")) {
Element citElement = (Element) fieldNode;
NodeList quoteNodeList = citElement.getElementsByTagName("quote");
if(quoteNodeList.getLength() > 0) {
Node quoteNode = quoteNodeList.item(0);
String quote = quoteNode.getTextContent();
...
}
}
}
为了排除<re>
节点中包含的节点,您可以使用<sense>
检查nNode.getParentNode().getNodeName()
节点的父节点,例如:
if (!nNode.getParentNode().getNodeName().equals("re")) {
....
}