英文:
Edit android manifest file with xmlstarlet
问题
我正在尝试使用xmlstarlet编辑Android清单文件。我想要更改包属性节点。
输入文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.demoapp">
</manifest>
期望的输出:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.prod.demoapp">
</manifest>
我尝试了一些方法,我认为问题出在命名空间上。我无法选择包属性,因为它的值(例如com.test.demoapp)是一个变量。
尝试使用命名空间的命令:
xmlstarlet edit -N N="http://schemas.android.com/apk/res/android" \
--update "//N:manifest[@name='package']/@value" \
--value "com.prod.demoapp" $androidManifestXMLfile
我也尝试了不使用命名空间的命令:
xmlstarlet edit \
--update "//manifest[@name='package']/@value" \
--value "com.prod.demoapp" $androidManifestXMLfile
但在这两种情况下,都没有发生任何更改。输出仍然是xml文件的内容。
英文:
I am trying to edit android manifest file with xmlstarlet. I want to change package attribute node.
Input file:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.demoapp">
</manifest>
expected output:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.prod.demoapp">
</manifest>
I tried few things, I think it's a issue with namespace. I am unable to select package attribute since it's value package name(e.g. com.test.demoapp) is a variable.
xmlstarlet edit -N N="http://schemas.android.com/apk/res/android" \
--update "//N:manifest[@name='package']/@value" \
--value "com.prod.demoapp" $androidManifestXMLfile
I also tried without namespace
xmlstarlet edit \
--update "//manifest[@name='package']/@value" \
--value "test" $androidManifestXMLfile
But in both cases nothing is changed. Output is content of xml file.
答案1
得分: 1
您选择的具有属性name='package'
的manifest
标签与任何内容都不匹配。
而是像这样仅选择package
属性本身:
xmlstarlet edit \
--update "//manifest/@package" \
--value "com.prod.demoapp" $androidManifestXMLfile
英文:
Your selection of a manifest
tag with attribute name='package'
does not match anything.
Instead just select the package
attribute itself like this:
xmlstarlet edit \
--update "//manifest/@package" \
--value "com.prod.demoapp" $androidManifestXMLfile
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论