XMLStarlet 没有删除元素
XMLStarlet isn't deleting elements
目前我有以下命令行,$f 代表文件:
xmlstarlet ed -d "//*/packageVersions" $f;
我也试过了
xmlstarlet ed -d "//packageVersions" $f;
我正在尝试解析 xml 个包含不同根元素名称的文件,这是其 ApexClass 下面的示例:
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>38.0</apiVersion>
<packageVersions>
<majorNumber>2</majorNumber>
<minorNumber>2003</minorNumber>
<namespace>abc</namespace>
</packageVersions>
<packageVersions>
<majorNumber>2</majorNumber>
<minorNumber>2001</minorNumber>
<namespace>def</namespace>
</packageVersions>
<status>Active</status>
</ApexClass>
但是在 运行 脚本之后,我在控制台中看到了文件的内容,但文件没有改变。
对我在这里做错了什么有什么想法吗?
这是因为默认命名空间http://soap.sforce.com/2006/04/metadata
。
尝试将其绑定到前缀并在 XPath 中使用它。
示例(未经测试)...
xmlstarlet ed -N x="http://soap.sforce.com/2006/04/metadata" -d "//x:packageVersions" $f;
有关详细信息,请参阅 http://xmlstar.sourceforge.net/doc/UG/ch05s01.html。
如果 XML 文件可能有不同的命名空间,但元素始终是 packageVersions
(有或没有命名空间前缀),您可以求助于测试本地名称...
xmlstarlet ed -d "//*[local-name()='packageVersions']" $f;
目前我有以下命令行,$f 代表文件:
xmlstarlet ed -d "//*/packageVersions" $f;
我也试过了
xmlstarlet ed -d "//packageVersions" $f;
我正在尝试解析 xml 个包含不同根元素名称的文件,这是其 ApexClass 下面的示例:
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>38.0</apiVersion>
<packageVersions>
<majorNumber>2</majorNumber>
<minorNumber>2003</minorNumber>
<namespace>abc</namespace>
</packageVersions>
<packageVersions>
<majorNumber>2</majorNumber>
<minorNumber>2001</minorNumber>
<namespace>def</namespace>
</packageVersions>
<status>Active</status>
</ApexClass>
但是在 运行 脚本之后,我在控制台中看到了文件的内容,但文件没有改变。
对我在这里做错了什么有什么想法吗?
这是因为默认命名空间http://soap.sforce.com/2006/04/metadata
。
尝试将其绑定到前缀并在 XPath 中使用它。
示例(未经测试)...
xmlstarlet ed -N x="http://soap.sforce.com/2006/04/metadata" -d "//x:packageVersions" $f;
有关详细信息,请参阅 http://xmlstar.sourceforge.net/doc/UG/ch05s01.html。
如果 XML 文件可能有不同的命名空间,但元素始终是 packageVersions
(有或没有命名空间前缀),您可以求助于测试本地名称...
xmlstarlet ed -d "//*[local-name()='packageVersions']" $f;