【问题标题】:Move XML child element up without changing text flow向上移动 XML 子元素而不更改文本流
【发布时间】:2020-06-08 13:07:59
【问题描述】:

我的 xml 文件看起来像:

<a>
  <s> blah blah </s>
  <s> bleep  
      <t> something different </t> 
      bloop</s>
  <s> bleh bleh </s>
</a>

并且想将&lt;t&gt; 元素上移一级,不改变文本流:换句话说,我希望它看起来像

<a>
  <s> blah blah </s>
  <s> bleep </s> 
  <t> something different </t> 
  <s> bloop</s>
  <s> bleh bleh </s>
</a>

我正在使用 java 和 jdom2,肯定有一个简单的方法可以解决这个问题,但我找不到。有什么优雅的想法吗?谢谢!

【问题讨论】:

  • 哇,没人吗?我想这一定是因为 java 和 xml 是如此罕见,不寻常的技术......:/

标签: java xml jdom-2


【解决方案1】:

好的,这就是我最终用手不雅地做这件事的方式,为了后代:

List<Element> lstChildren = new ArrayList<Element>(eltA.getChildren());
for (Element eltS : lstChildren) {

    //find s
    if (eltS.getName().contentEquals("s")) {

        int indexS = eltA.indexOf(eltS);
        List<Element> lstSub = new ArrayList<Element>(eltS.getChildren());
        for (Element eltT : lstSub) {

            //find t
            if (eltT.getName().contentEquals("t")) {

                //split the text at the child:
                int index = eltS.indexOf(eltT);

                if (index < eltS.getText().length()) {
                    Element elt1 = eltS.clone();
                    Element elt2 = eltS.clone();

                    for (int i = index; i < eltS.getContentSize(); i++) {
                        elt1.removeContent(index);                                                        
                    }
                    for (int i = 0; i <= index; i++) {
                        elt2.removeContent(0);                                                        
                    }

                    eltA.removeContent(indexS);
                    eltA.addContent(indexS, elt1);
                    eltA.addContent(indexS + 1, elt2);
                }

                //move it up one level
                eltT.detach();
                eltA.addContent(indexS + 1, eltT);
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    相关资源
    最近更新 更多