2016-04-29 4 views
0

Я хочу отредактировать значение узла «title» в следующем XML-файле, используя XMLStarlet. Необходимо отредактировать только узел заголовка, который является дочерним узлом локали с именем атрибута = «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

Смежные вопросы