如何获得 XML (JDom) 中放置克隆的确切位置?

发布于 2024-11-16 14:16:11 字数 1766 浏览 4 评论 0 原文

我有以下 XML 结构:


     主导
      贡献
     of
     <术语 allvalues="PA123:GNX" type="GNX" value="PA123">
       P450
     
     3A4
     
     肝脏
     致癌
     激活
     of
     <术语 allvalues="PA452609:DRUG" type="DRUG" value="PA452609">
       黄曲霉毒素
       B1
     
     .
  

我的任务是删除 Term 标签但保留 W 标签。我克隆了 W,但将它们添加到 SI 时不知道如何猜测正确的位置。

private void deleteInsideTerms(Element element){
    List allChildren = element.getChildren();
    for(int i = 0; i<allChildren.size(); i++){
        Element child = (Element) allChildren.get(i);
        if(child.getName().equalsIgnoreCase("term")){
                        List<Element> listW = child.getChildren("W");
                        for(int in = 0; in<listW.size(); in++){
                              Element clone = (Element) listW.get(in).clone();
                              child.getParentElement().addContent(**???**, clone);
                        }
                    else
            deleteInsideTerms(child);
    }

有谁

知道我必须插入什么作为索引? 谢谢。

I have the following XML Structure:

<S i="0" id="S1">
     <W C="JJ" id="W1" o1="0" o2="8">Dominant</W>
     <W C="NN" id="W2" o1="9" o2="21">contribution</W>
     <W C="IN" id="W3" o1="22" o2="24">of</W>
     <Term allvalues="PA123:GNX" type="GNX" values="PA123">
       <W C="NN" id="W4" o1="25" o2="29">P450</W>
     </Term>
     <W C="NN" id="W5" o1="30" o2="33">3A4</W>
     <W C="TO" id="W6" o1="34" o2="36">to</W>
     <W C="DT" id="W7" o1="37" o2="40">the</W>
     <W C="JJ" id="W8" o1="41" o2="48">hepatic</W>
     <W C="NN" id="W9" o1="49" o2="61">carcinogenic</W>
     <W C="NN" id="W10" o1="62" o2="72">activation</W>
     <W C="IN" id="W11" o1="73" o2="75">of</W>
     <Term allvalues="PA452609:DRUG" type="DRUG" values="PA452609">
       <W C="NN" id="W12" o1="76" o2="85">aflatoxin</W>
       <W C="NN" id="W13" o1="86" o2="88">B1</W>
     </Term>
     <W C="." id="W14" o1="88" o2="89">.</W>
  </S>

My task is to delete the Term tags but keeping the W tags. I cloned the Ws but when adding them to S I don't know how to guess the correct position.

private void deleteInsideTerms(Element element){
    List allChildren = element.getChildren();
    for(int i = 0; i<allChildren.size(); i++){
        Element child = (Element) allChildren.get(i);
        if(child.getName().equalsIgnoreCase("term")){
                        List<Element> listW = child.getChildren("W");
                        for(int in = 0; in<listW.size(); in++){
                              Element clone = (Element) listW.get(in).clone();
                              child.getParentElement().addContent(**???**, clone);
                        }
                    else
            deleteInsideTerms(child);
    }

}

Does anyone know what I have to insert as index?
Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

昇り龍 2024-11-23 14:16:11

您不必猜测位置;-)。在这种情况下,通常更容易删除所有内容,然后将其放回去,同时跳过应删除的项目(也避免克隆)。

    Element s = doc.getRootElement();
    List<Content> cl = s.removeContent();
    for (Content c : cl) {
        if (c instanceof Element && ((Element) c).getName().equals("Term")) {
            List<Content> sublist = ((Element) c).removeContent();
            for (Content w : sublist) {
                if (w instanceof Element
                        && ((Element) w).getName().equals("W")) {
                    s.addContent(w);
                }
            }
        } else {
            s.addContent(c);
        }
    }

OTOH,如果这只是更一般任务的示例,也许您应该考虑使用 XSL。

You shouldn't have to guess the position ;-). In cases like this, it is often easier to remove all the content and then put it back while skipping the items that should be removed (also avoids cloning).

    Element s = doc.getRootElement();
    List<Content> cl = s.removeContent();
    for (Content c : cl) {
        if (c instanceof Element && ((Element) c).getName().equals("Term")) {
            List<Content> sublist = ((Element) c).removeContent();
            for (Content w : sublist) {
                if (w instanceof Element
                        && ((Element) w).getName().equals("W")) {
                    s.addContent(w);
                }
            }
        } else {
            s.addContent(c);
        }
    }

OTOH, if this is just an example of a more general task, maybe you should consider using XSL instead.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文