将XML小明星定位到仅触及顶级元素下方的元素

时间:2018-05-22 20:51:16

标签: xml xpath xmlstarlet

<?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 :(得分:1)

我认为你非常接近。试试这个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