2011-06-09 105 views
1

我通常不需要做任何后端的工作,但是对于这个项目,我必须使用PHP解析XML,所以这对我来说都是新的,也是非常复杂的。我需要在页面上显示的第四个标签,我想我会使用的getElementsByTagName但麻烦的是前三个标签是相同的,所以它看起来是这样的:用PHP解析XML

<Person fname="John" lname="Smith"/> 
<Person fname="Frank" lname="Jones"/> 
<Person fname="Mike" lname="Jackson"/> 
<Person fname="Jack" lname="Williams"/> 
<value no="50"/> 
<value no="60"/> 
<value no="70"/> 

这里是我想什么使用第四标签的第一属性和第二标记的属性在我的HTML页面输出:

Mike: 60 

基本上,有没有什么办法可以要求第四标签的属性值,无论什么样的标签是或之前或之后发生的?

任何帮助将不胜感激 - 谢谢!

编辑 - 我没有写XML,我从远程服务器请求。

+0

您如何知道您必须获取第三个Person元素的fname属性并将其与第二个value元素的no属性相关联? – Gordon 2011-06-09 10:25:20

+0

这只是一个给定的......它总是那个人,它总是那个价值。所以我认为我真正想要的是类似于getElementById的东西,除了代替id,它需要获取第四个Person标签和第二个Value标签,文档的结构不会改变,唯一可能改变的东西是属性中的值......任何想法? – Jane 2011-06-09 11:01:06

回答

2

我对XML注释:

链接: http://php.net/simplexml.examples-basic

而且例如:

$xml='<p4wappremium> 
    <servermessage> 
     <providerref sid="123"/> 
     <useractioninfo 
      msisdn="48790300200" 
      tid="12123123" 
      stid="123123" 
      pid="345345" 
      bid="1" 
      /> 
    </servermessage> 
</p4wappremium>'; 

$xml = simplexml_load_string($xml); 

foreach ($xml->providerref[0]->attributes() as $name -> $value) { 
    ${$name}=$value; 
} 

foreach ($xml->useractioninfo[0]->attributes() as $name -> $value) { 
    ${$name}=$value; 
} 

希望这将是对你的情况非常有用。

2

那么我建议你重新组织你的“模式”。因为按照顺序将标签值关联起来,这看起来很奇怪,就像你一样。

为什么不

<Person fname="Mike" lname="Jackson" value="60"/> 

<Person fname="Mike" lname="Jackson"> 
<value no="60"/> 
</Person> 

呢?

实际上,您应用这些标签的方式似乎没有用,甚至可能无效。 B/C你试图解析的不是一个xml-dom-tree,而仅仅是一个列表。那么为什么不自己写一个列表解析器呢?

如果你想使用DOM扩展和getElementsByTagName(),那么根据manual,你将得到一个DOMNodeList对象,它允许你通过索引来引用结果节点!

+0

我不写XML,所以我不能重新组织它,我从远程服务器上抓取它... – Jane 2011-06-09 09:56:21

+0

我还应该补充说,值并不一定是特定于那个人的,他们只需要连接起来为了这个练习...... – Jane 2011-06-09 10:05:25