我需要更改一些嵌入在musicxml文件中的元素。我使用jSoup来解析文档并执行我的计算。
现在我想先了解jsoup doc并做一些修改。问题是,在xml文件中,元素没有唯一的标识符(例如,有许多注释和度量,注释没有编号)。
我像这样遍历文档。在达到某些标准后,我想更改特定的注释。在java中使用iter使用副本,因此修改元素并不会对原始doc产生影响。我可以用i = 0;我< ??或者其他的东西?这是否会以相同的顺序覆盖元素(对于检查标准很重要)。
for (Element thismeasure : thisPart.getElementsByTag("measure")) {
for (Element thisnote : thismeasure.children()) {
答案 0 :(得分:1)
很抱歉,如果我不理解你的问题:
你是什么意思“所以修改元素对原始文档没有影响”?
使用简单的xml我可以使用你的循环进行一些更改,测试xml将是:
<measure><note/><note at='1'/></measure>
我会找到带有属性at ='1'的音符,然后我会在其前后添加文本和节点,然后我会检查原始文档是否已更改,代码:
public static void main(String[] args) {
String xml = "<measure><note/><note at='1'/></measure>";
Document parse = Jsoup.parse(xml, "", Parser.xmlParser());
for (Element thismeasure : parse.getElementsByTag("measure")) {
for (Element thisnote : thismeasure.children()) {
if (thisnote.attr("at").equals("1")){
thisnote.text("newText");
thisnote.attr("newAttr", "value");
thisnote.before(new Element(Tag.valueOf("test1"),""));
thisnote.after(new Element(Tag.valueOf("test2"),""));
}
}
}
System.out.println(parse);
}
将输出:
<measure>
<note />
<test1></test1>
<note at="1" newattr="value">
newText
</note>
<test2></test2>
</measure>
正如所料。
我希望它能以任何方式提供帮助。
答案 1 :(得分:1)
我使用了更多&#34;传统&#34;方法:
for (int z = 0; z < this.doc.select("part").size(); z++ ){
for (int y = 0; y < this.doc.select("part").get(z).getElementsByTag("measure").size(); y++){
...
这允许我使用set方法更改实际doc变量中的元素。