Я пытаюсь использовать nul (U + 0) для разграничения значений xml в выводе xmlstarlet. xmlstarlet
игнорирует -o ''
, -o $'\0'
и -o '\0'
.
Я знаю, что могу использовать другие символы, такие как различные разделители полей, для разграничения вывода. Проблема с этим подходом заключается в том, что эти символы также могут существовать как данные. Я не хочу никакой двусмысленности.
Я хочу использовать nul специально, потому что это единственное значение, которое не может быть представлено в необработанном XML.
Итак, повторю мой вопрос: Как разделить вывод xmlstarlet с помощью nul?
Дополнительная информация
Я включил следующую информацию по просьбе людей, которые просили ее. Хотя я ценю ваше желание помочь, пожалуйста, не предлагайте решения XY. Я только ищу ответ на свой вопрос, как представлено.
Данные, с которыми я работаю, выглядят так:
<data>
<datapoint attribute-1="val-1" attribute-2="val-a" />
<datapoint attribute-1="val-2" attribute-2="val-b" />
<datapoint attribute-1="val-3">
<sub-datapoint />
</datapoint>
</data>
То, как я пытаюсь использовать xmlstarlet:
mapfile -tf ARRAY < <( xmlstarlet sel -t -m /data/datapoint -o 'datapoint' -o $'\0' -v ./@attribute-1 -o $'\0' data.xml )
Шестнадцатеричный дамп вывода, который я ищу:
64 61 74 61 70 6f 69 6e 74 00 76 61 6c 2d 31 00 |datapoint.val-1.|
64 61 74 61 70 6f 69 6e 74 00 76 61 6c 2d 32 00 |datapoint.val-2.|
64 61 74 61 70 6f 69 6e 74 00 76 61 6c 2d 33 00 |datapoint.val-3.|
nul
заключается в том, что он не может быть представлен в xml. Я обновил свой вопрос, чтобы сделать это требование более ясным. - person Tenders McChiken   schedule 06.12.2020