如何更新文件中的XML字符串?

时间:2019-02-08 20:57:24

标签: xml-parsing xmlstarlet

平台:MacOS

我一直在努力使xmlstarlet正常工作,并且对为什么它无法在下面的示例代码片段中执行我的操作一无所知:

<?xml version="1.0" encoding="utf-8" standalone="no"?> 
<application xmlns="http://ns.adobe.com/air/application/32.0">    
    <filename>Administrator</filename>

    <name>Administrator</name>

    <versionLabel>4.5.0</versionLabel> 
    <versionNumber>1</versionNumber> 

</application>

我的最终目标是拥有一个由intelliJ运行的脚本,然后该脚本才能自动递增<versionNumber>标签。

它应该读入值,将其递增,然后写回。

我在其他Xcode项目上使用plistbuddy做过很多次,但是事实证明,使用纯.xml文件和推荐的 xmlstarlet 令人沮丧。

即使只是尝试写出bash中的值对我也不起作用:

xmlstarlet sel -t -v "//versionNumber" ./Administrator-app.xml

sed和awk对于这些东西确实很凌乱,但已显示出一些结果。我在这里想念什么?

1 个答案:

答案 0 :(得分:2)

It's not working because the XML is in the default namespace

费: http://xmlstar.sourceforge.net/doc/UG/xmlstarlet-ug.html#idm47077139530992

  

“ ...为了更轻松地处理名称空间,XMLStarlet   (版本1.2.1+)将使用在根目录上声明的名称空间前缀   输入文档的元素。默认名称空间将绑定到   前缀“ _”和“默认”(在1.5.0+版本中)。所以另一种方式   解决句柄上一个示例将是:“

xmlstarlet sel -t -m "//_:versionNumber" -v . -n Administrator-app.xml

结果:

1