У меня есть несколько xml-файлов для очистки с помощью инструмента командной строки xmlstarlet (1.6.1).
Образец 1
<?xml version="1.0" encoding="utf-8"?>
<!-- Some license comment
- with some link to http://example.com/foo/ -->
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
<ShortName>Name Sample 1</ShortName>
<Description>Description Sample 1</Description>
<InputEncoding>UTF-8</InputEncoding>
<Image height="16" width="16">data:...</Image>
<Url type="text/html" method="get" template="https://examplesearch.com/" rel="searchform">
<Param name="q" value="{searchTerms}"/>
<MozParam name="m1" condition="purpose" value="abc"/>
<MozParam name="m2" condition="purpose" value="cde"/>
</Url>
</OpenSearchDescription>
Образец 2
<!-- Some license comment
- with some link to http://example.com/foo/ -->
<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
<ShortName>Name Sample 2</ShortName>
<Description>Description Sample 2</Description>
<InputEncoding>UTF-8</InputEncoding>
<Image width="16" height="16">data:...</Image>
<Url type="application/x-suggestions+json" method="GET" template="https://www.examplesearch.com/search?client=firefox&q={searchTerms}"/>
<Url type="text/html" method="GET" template="https://examplesearch.com/search" rel="searchform">
<Param name="q" value="{searchTerms}"/>
</Url>
</SearchPlugin>
Сначала я пытаюсь очистить узел Description
, который работает для образец 2 :
xml ed -L -u "//_:SearchPlugin/_:Description" -v "" sample2.xml
В результате получается узел<Description/>
, но та же логика не работает для образца 1 :
xml ed -L -u "//_:OpenSearchDescription/_:Description" -v "" sample1.xml
Я хотел бы получить <Description><Description/>
как результаты для обоих образцов XML.
Обновление: Предыдущая часть была решена.
Во-вторых, в образец 2 Я хотел бы удалить client=firefox&
извторого Url
значения шаблона:
"https://www.examplesearch.com/search?client=firefox&q={searchTerms}"
Я понятия не имею, как применить к значению операцию regex / xslt для достижения этой цели.Любые предложения, как это можно сделать?