1

我需要更改一些嵌套在 musicxml 文件中的元素。我使用 jSoup 来解析文档并执行我的计算。

现在我想了解一下 jsoup 文档并先进行一些修改。问题是,在 xml 文件中,元素没有唯一标识符(例如,有很多注释和小节,注释没有编号)。

我像这样循环浏览文档。在满足某些条件后,我想更改特定的注释。在 java 中使用这个迭代器使用一个副本,因此修改元素不会对原始文​​档产生影响。我可以使用 i = 0; 我 < ?? 或者其他的东西?这是否会以相同的顺序遍历元素(对于检查标准很重要)。

for (Element thismeasure : thisPart.getElementsByTag("measure")) {

                for (Element thisnote : thismeasure.children()) {
4

2 回答 2

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>

正如预期的那样。

我希望它会以任何方式提供帮助。

于 2015-03-05T11:10:42.853 回答
1

我使用了一种更“传统”的方法:

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 变量中的元素。

于 2015-03-05T11:48:42.643 回答