2016-04-29 52 views
0

XMLStarletを使用して、次のXMLファイルのノード "title"の値を編集します。属性名= "de-DE"のロケールの子ノードであるタイトルノードのみを編集する必要があります。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

関連する問題