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