Как обновить строку XML в файле? - PullRequest
0 голосов
/ 08 февраля 2019

Платформа: MacOS

Я изо всех сил пытался заставить работать xmlstarlet, и у меня нет идей относительно того, почему он не выполняет мою операцию с примером кода ниже:

<?xml version="1.0" encoding="utf-8" standalone="no"?> 
<application xmlns="http://ns.adobe.com/air/application/32.0">    
    <filename>Administrator</filename>

    <name>Administrator</name>

    <versionLabel>4.5.0</versionLabel> 
    <versionNumber>1</versionNumber> 

</application>

Моя конечная цель - создать скрипт, который будет запускаться intelliJ перед сборкой для автоматического увеличения тега <versionNumber>.

Он должен прочитать значение, увеличить его, а затем записать обратно.

Что-то, что я делал много раз с plistbuddy в других проектах Xcode, но использование простого XML-файла и рекомендуемого xmlstarlet оказалось разочаровывающим.

Даже просто попытка записать значение в bash не работает для меня:

xmlstarlet sel -t -v "//versionNumber" ./Administrator-app.xml

sed & awk действительно грязные для этого материала, но показали, что дают некоторые результаты,Что мне здесь не хватает?

1 Ответ

0 голосов
/ 09 февраля 2019

Это не работает, потому что XML находится в пространстве имен по умолчанию

fyi: http://xmlstar.sourceforge.net/doc/UG/xmlstarlet-ug.html#idm47077139530992

"... Для обработки пространств имен сДля большей простоты XMLStarlet (версии 1.2.1+) будет использовать префиксы пространства имен, объявленные в корневом элементе входного документа. Пространство имен по умолчанию будет связано с префиксами "_" и "DEFAULT" (в версиях 1.5.0+)Таким образом, другой способ решения дескриптора предыдущего примера был бы: "

xmlstarlet sel -t -m "//_:versionNumber" -v . -n Administrator-app.xml

Результат:

1

...