Я пытаюсь добавить/обновить свойство в файле .plist, используя спецификацию ключа XPath. Я тестировал файл, который выглядит следующим образом:
Код: Выделить всё
testProp
text
54
2023-11-09T16:29:34Z
objectProp
text
54
2023-11-09T16:29:34Z
и объект XMLPropertyListConfiguration, построенный следующим образом:
Код: Выделить всё
File file = new File("path/to/config.plist");
XMLPropertyListConfiguration configuration =
new FileBasedConfigurationBuilder(XMLPropertyListConfiguration.class)
.configure(new Parameters().xml()
.setFile(file)
.setExpressionEngine(new XPathExpressionEngine()))
.getConfiguration();
// do any changes, then save the file using:
FileHandler handler = new FileHandler(configuration);
handler.save(file);
Моя цель: отредактировать значение в одном из свойств массива или вставить в массив новое значение. Я думал, что Configuration.setProperty("/testProp[2]", "другая строка") приведет к следующему результату (некоторые части вырезаны для краткости):
Код: Выделить всё
testProp
text
a different string
2023-11-09T16:29:34Z
но вместо этого он добавил testProp[2] как собственное свойство:
Код: Выделить всё
testProp
text
54
2023-11-09T16:29:34Z
objectProp
text
54
2023-11-09T16:29:34Z
testProp[2]
a different string
Насколько я понимаю, вы используете предикат testProp[n] для указания n-го свойства/значения testProp, но здесь явно не тот случай. Есть ли что-то, что мне не хватает конкретно в массивах? Или мне придется прочитать testProp как список, изменить список, а затем сохранить весь список обратно как testProp? Лучшее решение, которое я ищу, - это что-то, что может включать всю необходимую информацию в строку XPath, но если мне нужно обрабатывать индекс в массиве отдельно, это тоже можно обработать.
Подробнее здесь:
https://stackoverflow.com/questions/793 ... th-xpathex