Я ищу для извлечения элементов из большого XML-файла в отдельные файлы, желательно с помощью команды или скрипта.Извлечь все элементы из большого XML в отдельные файлы
Проблема заключается в том, что XML не сформирован надлежащим образом и является собственностью, и всякий раз, когда я пытаюсь использовать утилиты XML, такие как twig или xmlstarlet, данные неправильно обрабатываются, а специальные символы перепутаны. Поэтому моя потребность в просто регулярное выражение матча и прямой копией точно совпадает с файлом (итеративно) для каждого матча, где имена файлов итерацию сказать match1.xml match2.xml
Пример XML-источник:
...
<testcase id="001" kind="bvt">
<inputs>
<arg1>4</arg1>
<arg2>7</arg2>
</inputs>
<expected>11.00</expected>
</testcase>
<testcase id="002" kind="drt">
<inputs>
<arg1>9</arg1>
<arg2>6</arg2>
</inputs>
<expected>15.00</expected>
</testcase>
<testcase id="003" kind="bvt">
<inputs>
<arg1>5</arg1>
<arg2>8</arg2>
</inputs>
<expected>13.00</expected>
</testcase>
...
Желаемый результат: Содержание match1.xml:
...
<testcase id="001" kind="bvt">
<inputs>
<arg1>4</arg1>
<arg2>7</arg2>
</inputs>
<expected>11.00</expected>
</testcase>
...
Содержание match2.xml:
..
<testcase id="002" kind="drt">
<inputs>
<arg1>9</arg1>
<arg2>6</arg2>
</inputs>
<expected>15.00</expected>
</testcase>
...
и так далее.
Вот несколько регулярных выражений, которые я собрал вместе, которые будут работать. Все, что мне нужно, - это помощь по объединению цикла в скрипте bash для копирования каждого элемента match/element в его собственный файл.
(<testcase*[\s\S]*?<\/testcase>)
Большинство людей здесь, вероятно, будут препятствовать использованию инструментов оболочки/синтаксиса/регулярных выражений для проблем xml - ознакомьтесь с xslt и используйте, например. [xalan] (https://xalan.apache.org/xalan-j/), который имеет расширение для записи разных файлов во время преобразования (другие процессоры могут иметь что-то подобное). Если вы уверены, что ваш xml всегда приходит в том же форматировании, то я думаю, что это можно сделать с помощью gawk. - Мы всегда ценим, что код, который вы пытаетесь, но все еще имеет проблемы –
XML находится в запатентованном формате, который не очень хорошо сформирован, поэтому я уверен, что мне придется что-то использовать с sed и regex, чтобы просто сделать жадный захват целые пространства имен и скопировать их в отдельный файл. Проблема, с которой я продолжаю работать в таких утилитах, как twig и xmlstarlett, заключается в том, что данные замалчиваются.Вот некоторые фрагменты уступок, которые я должен был сделать при использовании утилит. –
для i в * .xml; do sed -i 's/\ &/\ &/g' $ i; сделано для i in * .xml; do sed -i 's/\ &\; quot/\ & quot; g' $ i; сделано для i in * .xml; do sed -i 's/SOAP-ENC: arrayType = "xsd: string \ [1 \]" xsi: type = "SOAP-ENC: Array"/xsi: type = "SOAP-ENC: Array" SOAP-ENC: arrayType = "xsd: string \ [1 \]"/g '$ i; сделано для i in * .xml; do sed -i 's/xml: space = "сохранить" xsi: type = "xsd: string"/xsi: type = "xsd: string" xml: space = "preserve"/g' $ i; сделано для i in * .xml; do sed -i 's/xml: space = "сохранить" xsi: type = "cm: guid"/xsi: type = "cm: guid" xml: space = "preserve"/g' $ i; сделано для i in * .xml; do sed -i 's/Â // g' $ 1; done –