Извлечение информации XML с использованием переполнения стека

У меня странный отформатированный XML-файл, я хочу извлечь <text xml:space="preserve" bytes="1099"> часть и превратить эту информацию в свой собственный массив.

Я предполагаю, что мне нужно найти | разделитель и разделение в этой точке, но не совсем уверен, как это сделать.

  <page>
<title>Martial Ares</title>
<ns>0</ns>
<id>23026</id>
<sha1>7imznp2a51dh3kslf5gtqnkpkidlvom</sha1>
<revision>
<id>79960</id>
<timestamp>2014-02-25T07:24:27Z</timestamp>
<contributor>
<username>JScathach</username>
<id>8024930</id>
</contributor>
<text xml:space="preserve" bytes="1017">{{Infobox card (2)
|card name=[Martial] Ares
|character name=Ares
|release_date=May 1 2013
|image 1=MartialAres5.jpg
|rarity 1=Super Special Rare
|pwr req 1=28
|sale price 1=94200
|max card lv 1=60
|max mastery lv 1=40
|quote 1=Ares prefers weapons that were used during the age of Greek myth: sword, axe, and spear.  But he can use any weapon expertly, and turn most ordinary objects into lethal weapons.
|base atk 1=2440
|base def 1=2650
|max atk 1=7015
|max def 1=7613
|mastery bonus atk 1=915
|mastery bonus def 1=993
|image 2=MartialAres6.jpg
|rarity 2=Ultimate Rare
|sale price 2=188400
|max mastery lv 2=200
|quote 2=Next time I see Hercules, We're going to have a steel conversation. It's about time for him to answer for massacring my Stymphalian Birds.
|max atk 2=9822
|max def 2=10660
|mastery bonus atk 2=1098
|mastery bonus def 2=1192
|alignment=Bruiser
|ability=Warhawk
|gender=Male
|usage=Average
|faction=Super Hero
|effect=Significantly harden DEF of your Bruisers.
|centretrait=None
}}
__NOWYSIWYG__
</text>
</revision>
</page>

1

Решение

Вы можете получить текст следующим образом:

$xml = simplexml_load_string($string);
$text = $xml->revision->text;
2

Другие решения

Я предполагаю, что мне нужно найти | разделитель и разделение в этой точке, но не совсем уверен, как это сделать.

Библиотеки на основе libxml PHP (это включает в себя SimpleXMLElement а также DOMDocument) с их параметрами по умолчанию сохранить пробелы в текст элемент вашего вопроса, поэтому с этой целью вы должны столкнуться с небольшими проблемами.

Для формата, который закодирован в текст элементы text-value, это Mediawiki синтаксис и в начале для его самой большой части Шаблон Infobox.

{{Infobox
| title = Top level title
| data1 = {{Infobox | decat = yes | child = yes
| title = First subsection
| label1= Label 1.1
| data1 = Data 1.1
}}
| data2 = {{Infobox | decat = yes | child = yes
|title = Second subsection
| label1= Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}

Пример шаблона инфобокса со встроенным использованием

Шаблон infobox следует общему синтаксису шаблона для присвоения имени шаблону и предоставления ему (именованных или неназванных) параметров. Вы найдете это в общих чертах в Синтаксис использования раздел Помощь: Шаблон. Поскольку сам Mediawiki написан на PHP, вы даже можете найти код PHP, связанный с анализом этих кодов шаблонов. в пределах своего источника. Он показывает, как эти данные предназначены для более строгого анализа, чем страница справки, однако, поскольку их исходный код немного модульный и структурированный, он гораздо более замысловатый. В зависимости от вашего типа программиста, это может ошеломить вас, поскольку требует навыков чтения и знаний о регулярных выражениях PCRE.

Из того, что я могу видеть до сих пор, является то, что вам нужно извлечь (рекурсивный) {{}} блоки в первую очередь. Внутри них вы разбираете заглавие и, необязательно, любое количество (именованное или неназванное) параметры. Символ-разделитель для разделения этих полей |, Я не могу сказать, может ли какой-либо из этих разделителей быть или как их экранировать, и не могу сказать, возможны ли многострочные значения для полей и имен — рядом с приведенными примерами, которые показывают значение, может быть другой шаблон, который тогда может быть многострочным.

1

По вопросам рекламы [email protected]