Я хочу преобразовать XML-документ с определенной схемой в другой XML-документ, придав ему определенную другую схему.Преобразование XML-документа в другую схему XML
В качестве примера, вход может быть следующим:
<?xml version="1.0" encoding="UTF-8"?>
<Abcd field1="0" field2="3" field3="1" field4="_sometext" field5="text" field6="Helloworld" />
<Efgh _id="2790" size="2">
<i>2771</i>
<i>2781</i>
</Efgh>
Соответствующий выход для этого примера:
<?xml version="1.0" encoding="UTF-8"?>
<field name="Abcd"> field1="0" field2="3" field3="1" field4="_sometext" field5="text" field6="Helloworld" </field>
<field name="Efgh"> _id="2790" size="2"
<i>2771</i>
<i>2781</i>
</field>
Есть только два типа тегов:
- такие, как Abcd, с переменным числом полей (поле1 в поле N)
- такие, как Efgh, которые также всегда имеют некоторое количество субтиттов < i> someText </i>. (Символ «i» всегда используется там).
Я не уверен, как это сделать (Regex? XSLT?).
Если бы были только теги формы 1 (например, Abcd), использование sed в bash могло бы сделать работу, я думаю, но с тегами формы 2, я не знаю, как действовать дальше.
Edit: Я написал небольшой трубопровод с использованием SED, которая преобразует строку формы 1 в правильный аналог, это работает следующим образом:
cat input1.xml | sed "s/ * /\"> /" | sed "s/</<field name=\"/" | sed "s,/>,</field>,"
Но как продолжить?
Это может быть сделано одним из многих способов, но Regex, похоже, не является правильным инструментом. XSLT или язык сценариев (bash, vb script и т. Д.) Кажутся лучшим выбором. – user2366842
"* Есть только два типа тегов *« Ну, не совсем: '' тоже тег. Однако реальной проблемой с вашим примером является отсутствующий корневой элемент на входе и выходе. - Также: вы уверены, что хотите переместить атрибуты из тега и сделать их бессмысленной строкой ?! –
Я просто попытался сделать фрагменты, содержащие только соответствующую информацию, которую нужно преобразовать, это вход и выход, поскольку он должен быть изменен, извините за путаницу. – tkja