将 XML starlet 定位为仅命中顶级元素下方的元素

Targeting XML starlet to only hit the element below top level element

<?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;

目标是将带有 "Object Name" 的标签元素修改为 "test" 而不是名为 "Summary" 的标签。但是两者都在改变。

我试过修改 select 或 "CustomObject/label" 但这似乎 select 不正确。

任何人有任何想法只点击 "Object Name" 标签。

我认为你们非常亲密。试试这个 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;

此外,由于您只是尝试 select x:label 这是根元素的直接子元素,您也可以使用这个较短的 xpath...

/*/x:label