Xml

使用 xmlstarlet 更新 XML 值

  • November 18, 2016

我有文件 config.xml:

<?xml version="1.0" encoding="utf-8"?> 
<widget xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0" id="app" version="2.5" android-versionCode="20500"> 
<name>App title</name> 
<description>Dummy dummy text.</description> 
</widget>

我想改變元素的值。

我試過以下:

xmlstarlet edit -L -u "/_:widget/name" -v "NEW_NAME" config.xml

xmlstarlet edit -L -u "//name" -v "NEW_NAME" config.xml

但它並沒有改變“應用程序標題”的值。

您需要指定命名空間,因為name元素位於http://www.w3.org/ns/widgets命名空間中:

xmlstarlet edit -L -N w=http://www.w3.org/ns/widgets -u "//w:name" -v "NEW_NAME" config.xml

此命令工作正常,但會更改 xml 文件中的每個條目。(所有帶名稱的欄位)

如果有多個具有相同名稱的欄位,應輸入什麼。我試過了:

xml ed -L -N w=http://artifactory.jfrog.org/xsd/1.7.9 -u "//w:mailServer/port" -v "123" artifactory.config.import.xml

但什麼也沒發生。然而,該命令被接受。

當我使用

xml ed -L -N w=http://artifactory.jfrog.org/xsd/1.7.9 -u "//w:port" -v "999" artifactory.config.import.xml 

每個名稱為 port 的項目都被更改為值 999。

引用自:https://unix.stackexchange.com/questions/169581