2012-08-10 73 views
1

行,我有以下列格式的一些基本XML:Extracing爲第二級別的XML節點的名稱/值對

<application> 
    <authentication> 
     <id>26</id> 
     <key>gabe</key> 
    </authentication> 
    <home> 
     <address>443 Pacific Avenue</address> 
     <city>North Las Vegas</city> 
     <state>NV</state> 
     <zip>89084</zip> 
    </home> 
</application> 

我加載上述XML到一個變量使用simplexml_load_string(),如下所示:

$xml = simplexml_load_string($xml_string); 

我想提取出來的第二個節點的名稱/值對,例如,我想忽略<authentication><home>節點。我只是在孩子們的興趣,這些第一級節點的內部節點:

  1. ID
  2. 關鍵
  3. 地址
  4. 城市
  5. 狀態
  6. 拉鍊

所以我正在尋找一個foreach循環,將提取出上面的6個名稱/值對,但忽略了「低級別」 l「名稱/值對。下面的代碼只打印爲<authentication><home>節點的名稱/值對(我想忽略):

foreach($xml->children() as $value) { 
    $name = chop($value->getName()); 
    print "$name = $value"; 
} 

有人可以幫助我的代碼,將解壓出來ONLY名稱/值爲上述6個節點配對?

回答

0

您可以使用XPath: http://php.net/manual/en/simplexmlelement.xpath.php

隨着路徑

/application/*/* 

你會得到所有的第二級別的元素。

編輯:

$string = <<<XML 
<application> 
    <authentication> 
     <id>26</id> 
     <key>gabe</key> 
    </authentication> 
     <home> 
      <address>443 Pacific Avenue</address> 
      <city>North Las Vegas</city> 
      <state>NV</state> 
      <zip>89084</zip> 
     </home> 
    </application> 
XML; 

    $xml = new SimpleXMLElement($string); 

    foreach($xml->xpath('/application/*/*') as $node){ 
     echo "{$node->getName()}: $node,\n"; 
    } 
+0

我仍然無法提取出第二級元素的相應名稱,只有值。請參閱下面的答案。 – 2012-08-10 11:15:36

0

好了,我查看了您的建議(奧利弗A.),並用下面的代碼上來:

$string = <<<XML 
<application> 
    <authentication> 
     <id>26</id> 
     <key>gabe</key> 
    </authentication> 
    <home> 
     <address>443 Pacific Avenue</address> 
     <city>North Las Vegas</city> 
     <state>NV</state> 
     <zip>89084</zip> 
    </home> 
</application> 
XML; 

$xml = new SimpleXMLElement($string); 

/* Search for <a><b><c> */ 
$result = $xml->xpath('/application/*/*'); 

while(list(, $node) = each($result)) { 
    echo '/application/*/*: ',$node,"\n"; 
} 

哪個返回如下:

/application/*/*: 26 
/application/*/*: gabe 
/application/*/*: 443 Pacific Avenue 
/application/*/*: North Las Vegas 
/application/*/*: NV 
/application/*/*: 89084 

這是進步,因爲我現在只有第二級元素的值。大!問題是我需要爲名稱和值對分配一個變量名稱。似乎我無法提取出每個二級節點的名稱。我錯過了什麼嗎?

+0

xpath返回簡單的xml元素。如果你使用它們作爲字符串,你只會看到內部值,但是可以在它們上使用對象方法。試試「$ node-> getName()」 – 2012-08-11 11:59:53

相關問題