Получить тег комментария из атрибута XML с помощью Bash - PullRequest
0 голосов
/ 24 сентября 2019

Я понимаю, как получить содержимое XML в обычных узлах, но мне хотелось бы понять, как извлечь содержимое в теге комментария в XML с использованием Bash.

Например, рассмотрим приведенный ниже фрагмент XML:

    <ParentTag1><!--This comment is associated to ParentTag1 -->
       <ChildTag1>ChildTag1Blah</ChildTag1><!-- ChildTag1 comment-->
       <ChildTag2><!-- ChildTag2 comment -->
          <GrandchildTag1>GrandchildTag1Blah</GrandchildTag1><!-- GrandchildTag1 comment-->
          <GrandchildTag2>GrandchildTag2Blah</GrandchildTag2><!-- GrandchildTag2 comment-->
       </ChildTag2>
   </ParentTag1>

Я хотел бы знать, как получить комментарий, связанный с рассматриваемым узлом.Например, учитывая ParentTag1, какую команду можно запустить, чтобы получить комментарий «Этот комментарий связан с ParentTag1»?Аналогично для других узлов.

В прошлом я использовал xmlstarlet для извлечения контента внутри узлов, но я не совсем уверен, будет ли это использоваться для извлечения контента в комментарии в XML.

1 Ответ

3 голосов
/ 24 сентября 2019

Для получения комментариев используйте селектор узла comment().
Чтобы получить комментарий «Этот комментарий связан с ParentTag1», вы можете использовать

xmlstarlet sel -t -v "//ParentTag1/comment()[1]" input.xml

Чтобы выбрать из всех комментариев-потомков, используйтеось descendant::comment() вот так

xmlstarlet sel -t -v "//ParentTag1/descendant::comment()" input.xml

Результат:

This comment is associated to ParentTag1 
ChildTag1 comment
ChildTag2 comment 
GrandchildTag1 comment
GrandchildTag2 comment

После этого вы можете проиндексировать нужный комментарий (или использовать другую ось).

...