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/\&/\&amp;/g
   s/>/\&gt;/g
   s/</\&lt;/g
 }

Тогда беги sed -f command.txt input.xml > output.xml

Таким образом, все < > & будет закодирован, только в целевых частях текста, разделенных <text а также </text> (эти границы остаются неизменными).

Документ здесь: http://sed.sourceforge.net/sedfaq4.html

Другие вопросы по тегам