2013-08-30 2 views
5

У меня есть следующий HTML-код:Как добавить новую строку после каждого матча, используя xmlint --xpath

<textarea name="command" class="setting-input fixed-width" rows="9">1</textarea><textarea name="command" class="setting-input fixed-width" rows="5">2</textarea> 

Я хотел бы разобрать его, чтобы получить такой результат:

1 
2 

В настоящее время я я использую:

xmllint --xpath '//textarea[@name="command"]/text()' --html 

, но после каждого матча он не добавляет новую строку.

+0

Как вы получаете выход сейчас? и где вы его протестировали? –

+0

@Babai Предполагая, что вышеуказанный HTML-код доступен в файле f, 'xmllint --xpath '// textarea [@ name =" command "]/text()' --html f' –

+0

На самом деле я тестировал его в онлайн-инструменте , и текст идет в новой строке .. так пытаясь понять, где вы хотите его напечатать .. –

ответ

2

Я сделал следующее, уродливое трюк, пожалуйста, не стесняйтесь предлагать лучшее решение.

Изменен HTML код, заменив </textarea> с \n</textarea>, используя следующую команду:

sed 's/\<\/textarea/\'$'\n\<\\/textarea/g' f 
+2

Вы можете использовать другие символы в качестве разделителей для sed, например. '%', поэтому вам не нужно избегать косой черты. – mkataja

0

Как я понял из this SO answer, это также возможно:

xmllint --shell input.xml <<<'cat //textarea[@name="command"]/text()' 

, а затем удалить "разделители" (ряды тире) на выходе с

all that whatnot above | sed '/^ -/d' 

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

Использование этого же метода в середине конвейера, вероятно, не представляется возможным, поскольку в этом случае stdin - это «настоящая строка», содержащая команду cat для оболочки xmllint.

Еще одно предложение в том же потоке, чтобы использовать xmlstarlet, если это доступно:

xmlstarlet sel -t -v '//textarea[@name="command"]/text()' input.xml 

... и это будет по-прежнему функционировать должным образом в трубе, скажем, от curl или что-то.

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