在不改变文本流的情况下向上移动 XML 个子元素
Move XML child element up without changing text flow
我有 xml 个文件,它们看起来像:
<a>
<s> blah blah </s>
<s> bleep
<t> something different </t>
bloop</s>
<s> bleh bleh </s>
</a>
并希望将 <t>
元素向上移动一级,而不更改文本流:换句话说,我希望它看起来像
<a>
<s> blah blah </s>
<s> bleep </s>
<t> something different </t>
<s> bloop</s>
<s> bleh bleh </s>
</a>
我将 java 与 jdom2 一起使用,肯定有一个简单的方法,但我找不到。任何优雅的想法?谢谢!
好吧,为了后代,这就是我最终如何不优雅地手工完成的:
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);
}
}
}
}
我有 xml 个文件,它们看起来像:
<a>
<s> blah blah </s>
<s> bleep
<t> something different </t>
bloop</s>
<s> bleh bleh </s>
</a>
并希望将 <t>
元素向上移动一级,而不更改文本流:换句话说,我希望它看起来像
<a>
<s> blah blah </s>
<s> bleep </s>
<t> something different </t>
<s> bloop</s>
<s> bleh bleh </s>
</a>
我将 java 与 jdom2 一起使用,肯定有一个简单的方法,但我找不到。任何优雅的想法?谢谢!
好吧,为了后代,这就是我最终如何不优雅地手工完成的:
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);
}
}
}
}