2016-04-29 60 views
0

我想使用XMLStarlet在以下XML文件中編輯節點「title」的值。只應該編輯屬性名爲「de-DE」的語言環境的子節點title節點。XMLStarlet:編輯具有特定屬性值的節點

<?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 

有誰知道爲什麼選擇是工作,但編輯不是?

回答

2

在您的編輯語句中,您還應該在外部定義中使用雙引號。現在的方式是@ 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 

我一般偏好是第一,在裏面使用雙引號使用單引號,但因爲兩者的工作原理是高達只要選擇的一致性保持。

+0

它的工作原理。謝謝。 – Apfelsaft

相關問題