Regex (или нет?): Кодировать все < > & в XML-файле и сохранять разметку XML
Я имитирую большой XML-файл, который я хочу импортировать в MediaWiki. Файл готов, но содержимое в <text>content</text>
еще осталось <
а также >
Я должен кодировать первым.
Мне бы хотелось, чтобы шаг кодирования выполнялся с помощью регулярных выражений (я использую Windows и такие программы, как возвышенный текст, панель редактирования или vim). Я также смогу запустить скрипт php.
С помощью ({{word)(.*?)(?=</text>)
Я был в состоянии выбрать все цели для замены - поскольку я не хочу кодировать саму разметку xml - но я не знаю, как выполнить тяжелую работу, то есть, как заменить все <и>, лежащие в хорошо нацеленном тексте.
Для большей наглядности здесь приведена небольшая выдержка из того, как выглядит контент, в котором мне нужно кодировать несколько символов (у меня есть еще 50000 таких в файле за 30 месяцев):
<page>
<title>Title:75002</title>
<ns>510</ns>
<id>21</id>
<revision>
<id></id>
<parentid></parentid>
<timestamp>2015-1-5T14:49:09Z</timestamp>
<contributor>
<ip>0:0:0:0:0:0:0:1</ip>
</contributor>
<text xmlspace="preserve" bytes="345">{{word
| vedette ={{{vedette}}}
| id ={{ROOTPAGENAME}}
| vedette =boutique, with forbidden > and
evil < multiline
<!-----------encyclo---------->
| étymologie = still have sometimes a messing >
and maybe a < more.
<!-----------relations-------->
| synonyme ={{AutoLienSyno | }}
}}</text>
<sha1></sha1>
<model>wikitext</model>
<format>text/x-wiki</format>
</revision>
</page>
Спасибо.
1 ответ
Для меня самым простым способом сделать несколько замен в повторяющемся выделении текста было использование sed.
Напишите файл command.txt с:
/<text/,/<\/text>/{
/<text/b
/<\/text>/b
s/\&/\&/g
s/>/\>/g
s/</\</g
}
Тогда беги sed -f command.txt input.xml > output.xml
Таким образом, все < > &
будет закодирован, только в целевых частях текста, разделенных <text
а также </text>
(эти границы остаются неизменными).
Документ здесь: http://sed.sourceforge.net/sedfaq4.html