2011-06-09 103 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