xmlstarlet для извлечения значений дочернего элемента HTML, который повторяется с разными значениями - PullRequest
1 голос
/ 16 января 2020

Цель: Использование xmlstarlet для извлечения значений дочернего элемента HTML, который повторяется с различными значениями и экспорта в CSV

Данные:

<?xml version="1.0" encoding="UTF-8"?>
<Library export_date="2020-01-15">
  <Book id="1001">
    <Title>Book 1</Title>
    <Date value="2019-05-16"/>
    <Author value="Name 1"/>
    <Author value="Name 2"/>
    <Author value="Name 3"/>
    <Author value="Name 4"/>
    <Author value="Name 5"/>
    <Author value="Name 6"/>
    <Author value="Name 7"/>
    <Author value="Name 8"/>
    <Author value="Name 9"/>
    <Author value="Name 10"/>
    <Author value="Name 11"/>
    <Author value="Name 12"/>
    <Author value="Name 13"/>
  </Book>
</Library>

Попытка:

xmlstarlet \
    sel -T -t -m /Library/Book \
    -v "concat('&quot;','Title','&quot;,&quot;',Author/@value,'&quot;')" \
    -n library_books.xml \
    > output.csv

# Remove xmlstarlet quotation bypass, convert to actual quotation
sed -i .bak 's|&quot;|\"|g' output.csv

Выход CSV:

"Title","Name 1"

Требуемый выход CSV:

"Title","Name 1; Name 2; Name 3; Name 4; Name 5; Name 6; Name 7; Name 8; Name 9; Name 10; Name 11; Name 12; Name 13"

Альтернативный требуемый выход CSV (значения в новой строке):

"Title","Name 1
Name 2
Name 3
Name 4
Name 5
Name 6
Name 7
Name 8
Name 9
Name 10
Name 11
Name 12
Name 13"

1 Ответ

0 голосов
/ 17 января 2020

Попробуйте в своей системе:

xmlstarlet sel -t -v "concat('Title: ',//Title, ' ')" -n -v "//Author/@value" min_library_books.xml > output.csv

Мой вывод - ваш второй вариант.

...