【问题标题】:XMLStarlet: Editing a node with specific attribute valueXMLStarlet:编辑具有特定属性值的节点
【发布时间】:2016-04-29 13:02:47
【问题描述】:

我想使用 XMLStarlet 编辑以下 XML 文件中节点“title”的值。只有 title 节点是 locale 的子节点,属性 name="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

有人知道为什么选择有效但编辑无效吗?

【问题讨论】:

    标签: bash shell xpath xmlstarlet


    【解决方案1】:

    在您的编辑语句中,您还应该在外部定义上使用双引号。现在的方式 @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
    

    我的一般偏好是先使用单引号,然后在内部使用双引号,但由于两者都有效,只要保持一致性,就可以自行选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-11
      • 2021-07-31
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-01
      • 2015-04-27
      相关资源
      最近更新 更多