XMLStarlet:编辑具有特定属性值的节点
XMLStarlet: Editing a node with specific attribute value
我想使用 XMLStarlet 在以下 XML 文件中编辑节点 "title" 的值。只有标题节点是 child 区域设置的节点,属性名称="de-DE" 应该被编辑。
<?xml version="1.0" encoding="UTF-8"?>
<package xmlns="http://apple.com/itunes/importer" version="software5.4">
<software>
<software_metadata app_platform="ios">
<versions>
<version string="1.1.1">
<locales>
<locale name="de-DE">
<title>title_DE</title>
</locale>
<locale name="en-US">
<title>title_EN</title>
</locale>
</locales>
</version>
</versions>
</software_metadata>
</software>
</package>
我尝试了以下命令,但它没有任何作用:
xml ed -N x="http://apple.com/itunes/importer" -u '/x:package/x:software/x:software_metadata/x:versions/x:version/x:locales/x:locale[@name='de-DE']/x:title' -v 'new titel' metadata.xml
使用相同的 XPath 查询进行选择工作正常:
xml sel -N x="http://apple.com/itunes/importer" -t -v "/x:package/x:software/x:software_metadata/x:versions/x:version/x:locales/x:locale[@name='de-DE']/x:title" metadata.xml
有人知道为什么选择有效但编辑无效吗?
在您的编辑语句中,您还应该在外部定义上使用双引号。现在的方式 @name='de-DE' 是问题所在,因为单引号结束了命令。
xml ed -N x="http://apple.com/itunes/importer" -u '/x:package/x:software/x:software_metadata/x:versions/x:version/x:locales/x:locale[@name="de-DE"]/x:title' -v 'new titel' metadata.xml
我的一般偏好是先使用单引号,然后在内部使用双引号,但由于两者都有效,所以只要保持一致性,就可以选择。
我想使用 XMLStarlet 在以下 XML 文件中编辑节点 "title" 的值。只有标题节点是 child 区域设置的节点,属性名称="de-DE" 应该被编辑。
<?xml version="1.0" encoding="UTF-8"?>
<package xmlns="http://apple.com/itunes/importer" version="software5.4">
<software>
<software_metadata app_platform="ios">
<versions>
<version string="1.1.1">
<locales>
<locale name="de-DE">
<title>title_DE</title>
</locale>
<locale name="en-US">
<title>title_EN</title>
</locale>
</locales>
</version>
</versions>
</software_metadata>
</software>
</package>
我尝试了以下命令,但它没有任何作用:
xml ed -N x="http://apple.com/itunes/importer" -u '/x:package/x:software/x:software_metadata/x:versions/x:version/x:locales/x:locale[@name='de-DE']/x:title' -v 'new titel' metadata.xml
使用相同的 XPath 查询进行选择工作正常:
xml sel -N x="http://apple.com/itunes/importer" -t -v "/x:package/x:software/x:software_metadata/x:versions/x:version/x:locales/x:locale[@name='de-DE']/x:title" metadata.xml
有人知道为什么选择有效但编辑无效吗?
在您的编辑语句中,您还应该在外部定义上使用双引号。现在的方式 @name='de-DE' 是问题所在,因为单引号结束了命令。
xml ed -N x="http://apple.com/itunes/importer" -u '/x:package/x:software/x:software_metadata/x:versions/x:version/x:locales/x:locale[@name="de-DE"]/x:title' -v 'new titel' metadata.xml
我的一般偏好是先使用单引号,然后在内部使用双引号,但由于两者都有效,所以只要保持一致性,就可以选择。