2015-08-02 2 views
1

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

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

<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> 
+0

После того, как у вас есть текст в «сохранении», вы можете использовать PHP function array explode (string $ delimiter, string $ string [, int $ limit]). См .: http://php.net/manual/fr/function.explode.php – TivBroc

+0

Значит, это не текст? например '$ xml-> page-> preserve;' будет работать? – CodeX

ответ

2

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

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

XML - это экспорт из wikia.com .. – CodeX

+0

Откуда берется строка '$? – CodeX

+0

Итак, посмотрев, что вы здесь сделали, я нашел, что это работает, '$ text = $ xml-> page-> revision-> text;' – CodeX

1

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

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

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

{{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 
}} 

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

Шаблон инфобокс следует общий синтаксис шаблона назвать шаблон и обеспечить (названные или неназванные) параметров к нему. Вы найдете это в Usage Syntax section of Help:Template. Поскольку сама Mediawiki написана на PHP, вы даже можете найти PHP-код, который связан с разбором этих кодов шаблонов within it's source. Он показывает, как эти данные должны анализироваться в более строгом смысле, чем справочная страница, однако, поскольку исходный код немного модульный и структурированный, он намного более запутан. В зависимости от вашего типа программиста это может ошеломить вас, поскольку оно требует навыков чтения и знаний о регулярных выражениях PCRE.

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

+0

Ничего себе, спасибо, это прекрасно. – CodeX

Смежные вопросы