首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JAVA中使用DOM解析器按ID获取元素

在JAVA中使用DOM解析器按ID获取元素
EN

Stack Overflow用户
提问于 2015-04-26 15:56:24
回答 1查看 1.6K关注 0票数 1

我有一个XML文件,其结构如下:

代码语言:javascript
复制
<?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解析它,以获得包含在具有属性quotecit元素中的每个type="translation"值:

  • 我只需要拥有quote元素的文本内容,但不需要直接节点(如<quote>petits <hi rend="i">mpl</hi></quote> )的文本内容
  • 我不需要将quote元素的文本内容包含在re元素中

最后,我需要得到这个结果:

代码语言:javascript
复制
entry ==> young_1
  translations ==> [jeune;petits]

目前,我的JAVA代码是:

代码语言:javascript
复制
    //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>.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-26 16:04:14

您可以完全按照访问<quote>元素的方式访问<cit>元素:通过使用Element#getElementsByTagName(String name)方法:

代码语言:javascript
复制
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>节点中包含的节点,可以使用nNode.getParentNode().getNodeName()检查<sense>节点的父节点,例如:

代码语言:javascript
复制
 if (!nNode.getParentNode().getNodeName().equals("re")) {
       ....
 }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29879909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档