Ориентация XML-старлета на попадание только в элемент ниже элемента верхнего уровня - PullRequest
0 голосов
/ 22 мая 2018
<?xml version="1.0" encoding="UTF-8"?>
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
    <fields>
        <fullName>Summary__c</fullName>
        <defaultValue>false</defaultValue>
        <deprecated>false</deprecated>
        <externalId>false</externalId>
        <inlineHelpText>Dummy Text.</inlineHelpText>
        <label>Summary</label>
        <trackTrending>false</trackTrending>
        <type>Checkbox</type>
    </fields>
    <label>Object Name</label>
</CustomObject>

У меня есть вышеуказанный XML, и я пытаюсь запустить следующую команду (с $ f, являющейся ссылкой на переменную файла):

xmlstarlet ed -L -N x="http://soap.sforce.com/2006/04/metadata" -u "//x:label" -v 'test' $f;

Цель состоит в том, чтобы изменить элемент метки с помощью "Имя объекта "для" тестирования ", но не метка" Сводка ".Однако оба изменяются.

Я пытался изменить селектор, чтобы сделать «CustomObject / label», но, похоже, он выбирается неправильно.

У любого есть мысли, что нужно нажать только на ярлык «Имя объекта».

1 Ответ

0 голосов
/ 23 мая 2018

Я думаю, вы были очень близки.Попробуйте вместо этого xpath ...

/x:CustomObject/x:label

обновленная командная строка ...

xmlstarlet ed -L -N x="http://soap.sforce.com/2006/04/metadata" -u "/x:CustomObject/x:label" -v 'test' $f;

Кроме того, поскольку вы только пытаетесь выбрать x:label, который является прямым потомкомкорневой элемент, вы также можете использовать этот более короткий xpath ...

/*/x:label
...