Q: Как очистить XML-файлы с помощью xmlstarlet? - PullRequest
0 голосов
/ 09 марта 2019

У меня есть несколько 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&amp;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&amp; извторого Url значения шаблона:

"https://www.examplesearch.com/search?client=firefox&amp;q={searchTerms}"

Я понятия не имею, как применить к значению операцию regex / xslt для достижения этой цели.Любые предложения, как это можно сделать?

...