繁体   English   中英

删除父节点并保留其子节点

[英]Remove parent node and keep its children

我有此XML想要删除链接标记并保留其所有子代

输入xml:

  <P>
  <LINK TYPE="ERRATUM" DOI="">
    Der Kommentar zum Artikel Schaefer et al. in Heft 4/91 (S. 238) wurde
    nicht von PD Dr.
    <EM EMTYPE="ITALIC">M. Stöckle</EM>
    (Urologische Klinik, Mainz), sondern von PD Dr.
    <EM EMTYPE="ITALIC">O. Schofer</EM>
    (Kinderklinik der Universität, Mainz) verfasst.
  </LINK>
  </P>

输出xml:

  <P>

    Der Kommentar zum Artikel Schaefer et al. in Heft 4/91 (S. 238) wurde
    nicht von PD Dr.
    <EM EMTYPE="ITALIC">M. Stöckle</EM>
    (Urologische Klinik, Mainz), sondern von PD Dr.
    <EM EMTYPE="ITALIC">O. Schofer</EM>
    (Kinderklinik der Universität, Mainz) verfasst.

  </P>

我尝试了这段代码,但没有成功!

private void visitRecursively(Node node, Document document, String tagToRemove) {

    // get all child nodes
    NodeList list = node.getChildNodes();
    for (int i = 0; i < list.getLength(); i++) {

        // get child node

        Node childNode = list.item(i);

        if(childNode != null){
            if(childNode.getNodeType() == Node.ELEMENT_NODE){
                if(childNode.getNodeName().equals(tagToRemove)){

                    NodeList nodeList = childNode.getChildNodes();
                    Node parentNode = childNode.getParentNode();
                    System.out.println("parent= "+parentNode.getNodeName());
                    for(int j = 0 ; j < nodeList.getLength() ;  ++j ){
                            parentNode.appendChild(nodeList.item(j));
                    }
                }
            }
        }
        visitRecursively(childNode, document, tagToRemove);
    }
}

谢谢!

对于基于行的格式设置,我只需将文本解析为列表,然后删除包含“ <LINK ”或“ </LINK ”的行。 然后修剪列表以调整大小,删除所有空白行。

比处理NodeList的递归操作要快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM