Получить структуру XML-узла - Bash - PullRequest
1 голос
/ 31 октября 2019

Я пытаюсь получить структуру узла данного XML-файла на компьютере Windows с помощью git bash. Я в значительной степени следовал тому, что упоминалось в этом примере .

Я выполняю ту же команду, что и в примере, а именно:

xml sel -T -t -m '//*' \
    -m 'ancestor-or-self::*' -v 'name()' -i 'not(position()=last())' -o \
    . -b -b -n structure.xml

Эта командаотлично работает на MAC (через обычный терминал). Тем не менее, когда я запускаю его на компьютере Windows через git bash, он возвращает только корневой узел структуры XML, а не все дерево, как ожидалось.

Какая будет эквивалентная команда для запуска дляполучить всю структуру? Я попытался указать различные оси XPath, как указано здесь , но безрезультатно.

РЕДАКТИРОВАТЬ:

Скажем, например, у меня было нижеСтруктура XML

<node1>
   <node2>
       <node3>Whatever</node3>
   </node2>
<node1>

Приведенная выше команда должна вернуть (как это происходит в MAC)

node1
node1.node2
node1.node2.node3

, тогда как в Windows она просто возвращает корневой узел, то есть node1

1 Ответ

1 голос
/ 04 ноября 2019

Либо попробуйте выполнить следующую составную команду:

structure=$(xml el structure.xml) && echo "${structure//\//.}"

Объяснение:

  1. Это упрощает xmlstarlet cmdиспользуя подстановку команды , чтобы присвоить результат переменной structure. Команда xmlstarlet возвращает имена узлов, разделенные косой чертой (/).

    Например:

    node1/node2/node3

  2. После оператора && мы echo получаем значение structure, используя расширение параметра , чтобы заменить косую черту точками (.).

...