使用PHP提取XML信息
我有一个格式奇怪的XML文件,我想提取使用PHP提取XML信息,php,xml,mediawiki-templates,Php,Xml,Mediawiki Templates,我有一个格式奇怪的XML文件,我想提取部分,并将该信息转换为它自己的数组 我假设我必须找到|分隔符并在该点进行拆分,但不太确定如何进行拆分 <page> <title>Martial Ares</title> <ns>0</ns> <id>23026</id> <sha1>7imznp2a51dh3kslf5gtqnkpkidlvom</sha1>
部分,并将该信息转换为它自己的数组
我假设我必须找到|分隔符并在该点进行拆分,但不太确定如何进行拆分
<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
23026
7imznp2a51dh3kslf5gtqnkpkidlvom
79960
2014-02-25T07:24:27Z
杰斯卡塔赫
8024930
{{信息箱卡(2)
|卡名=[军事]战神
|字符名=战神
|发布日期=2013年5月1日
|图1=MartialAres5.jpg
|稀有1=超特殊稀有
|压水堆要求1=28
|售价1=94200
|最大卡1级=60
|最高掌握等级1=40
|quote 1=阿瑞斯更喜欢希腊神话时代使用的武器:剑、斧和矛。但他可以熟练地使用任何武器,并将大多数普通物体变成致命武器。
|基准atk 1=2440
|基本def 1=2650
|最大atk 1=7015
|最大def 1=7613
|精通奖金atk 1=915
|掌握奖励def 1=993
|图2=MartialAres6.jpg
|稀有2=终极稀有
|售价2=188400
|最大精通等级2=200
|quote 2=下次我看到大力士时,我们将进行一次激烈的对话。是时候让他为屠杀我的Stymphalian鸟负责了。
|最大atk 2=9822
|最大def 2=10660
|精通奖金atk 2=1098
|掌握加成def 2=1192
|校准=制动器
|能力=战鹰
|性别=男性
|使用率=平均值
|派系=超级英雄
|效果=显著硬化你的瘀伤部位的DEF。
|centretrait=None
}}
__诺维希__
您可以通过以下方式获取文本:
$xml = simplexml_load_string($string);
$text = $xml->revision->text;
我假设我必须找到|分隔符并在该点进行拆分,但不太确定如何进行拆分
PHP基于libxml的库(包括simplexmlement和DOMDocument)及其默认选项确实保留了问题文本元素中的空白,因此在这方面您应该会遇到一些小问题
对于编码到文本元素文本值中的格式,这是Mediawiki语法,并且在开头是它的最大部分
具有嵌入式使用的infobox模板示例
infobox模板遵循常规模板语法来命名模板并为其提供(命名或未命名)参数。您可以在中找到这一点。由于Mediawiki本身是用PHP编写的,您甚至可以找到与解析这些模板代码相关的PHP代码。它显示了如何以比帮助页面更严格的方式解析这些数据,但是由于它的源代码是以一种稍微模块化和结构化的方式进行的,所以要复杂得多。根据您的程序员类型,它可能会让您不知所措,因为它需要阅读PCRE正则表达式的技能和知识
到目前为止,我所看到的是,您需要首先提取(递归)
{{{
..}
块。在这些参数中,您可以解析标题和任意数量的(命名或未命名)参数。分隔这些字段的分隔字符是|
。我不能说这些定界符是否可以,或者它们是如何转义的,也不能说字段和名称是否可以使用多行值——在给出的示例旁边,显示一个值的模板可以是另一个多行的模板。一旦在“preserve”中有了文本,就可以使用PHP函数array explode(字符串$delimiter,字符串$string[,int$limit]).See:那么名称不是文本吗?例如,$xml->page->preserve;
可以工作吗?$string
从哪里来?好的,所以在看到您在这里所做的工作后,我发现这是有效的,$text=$xml->page->revision->text;
是的,获取文本,我以为您试图获取空格=preserve部分?$string是您的全部xml文档。哦,你只是想要文本的内容?编辑:)谢谢你的帮助Jessica,得到了所有数据的数组,耶!:)
{{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
}}