2010-06-28 53 views
2

使用我的下面的代碼,我可以很容易地讀取<abcxyz> xml標籤。但我怎麼能讀<abc:xyz></abc:xml> XML標籤之間的數據.. XML標記使用php.pls幫助....如何閱讀< abc: xyz >使用PHP的XML標籤?

我的PHP代碼示例...

$objDOM->load("abc.xml"); 
    $note = $objDOM->getElementsByTagName("note"); 
    foreach($note as $value) 
    { 
    $tasks = $value->getElementsByTagName("tasks"); 
    $task = $tasks->item(0)->nodeValue; 
    $details = $value->getElementsByTagName("details"); 
    $detail = $details->item(0)->nodeValue;  
    echo "$task :: $detail<br>"; 
    } 

我的XML代碼示例:

<mynotes> 
    <note> 
     <tasks>Task 1</tasks> 
     <details>Detail 1</details> 
    </note> 
    <abc:xyz> Cannot Read the XML data between this tag</abc:xyz> 
</mynotes> 

PLS指導我...

謝謝
里亞德

+2

$ objDOM是什麼類?它可以執行XML命名空間嗎?因爲看起來像'abc'是在標籤的背景下的... – 2010-06-28 07:07:40

回答

2
+1

你能否給我一個例子..因爲在那個鏈接上我沒有得到任何正確的例子。 – riad 2010-06-28 07:11:46

+1

使用這個例子我得到abc和xyz轉換爲分離的變量,如$ v1和$ v2。但我不能把$ value-> getElementsByTagName($ v1,$ v2);在這個函數之間得到這個值..我需要這個標籤之間的值 – riad 2010-06-28 07:15:47

+0

@riad檢查我的答案 – 2011-07-14 10:39:58

7

abc:xyz意味着元素被命名爲xyz命名空間abc表示。名稱空間部分實際上是URI的縮寫,通常也在XML文件中給出。例如,您可能會看到這一點:

xmlns:abc="http://www.abc.com/xml"

在這種情況下,冒號前有abc元素在命名空間http://www.abc.com/xml

要檢索此元素,您需要使用getElementsByTagNameNS並將http://www.abc.com/xml作爲名稱空間。

+1

請檢查您是否可以回答此問題http://stackoverflow.com/questions/6665222/unable-to-parse-xml -data與 - 結腸 - 從 - 響應 - 使用 - 使用getNamespaces – 2011-07-12 13:53:19

1

與其他人一樣的DOMDocument::getElementsByTagNameNS方式去建議,這裏是一個工作的代碼(包括閱讀在內的內容),假設你也有一些空間聲明(如<abc:response xmlns:abc="http://api-url">)部分由@Sjoerd指出 -

$xml = '<?xml version="1.0"?> 
     <abc:response xmlns:abc="http://api-url"> 
     <mynotes> 
      <note> 
      <tasks>Task 1</tasks> 
      <details>Detail 1</details> 
      </note> 
     <abc:xyz> Can Read the XML data between this tag!!</abc:xyz> 
     </mynotes> 
     </abc:response>'; 

$dom = new DOMDocument; 
// load the XML string defined above 
$dom->loadXML($xml); 


foreach ($dom->getElementsByTagNameNS('http://api-url', '*') as $element) 
{ 
    //echo 'see - local name: ', $element->localName, ', prefix: ', $element->prefix, "\n"; 
    if($element->localName == "xyz") 
     echo get_inner_html($element); 

} 

function get_inner_html($node) 
{ 
    $innerHTML= ''; 
    $children = $node->childNodes; 
    foreach ($children as $child) 
    { 
     $innerHTML .= $child->ownerDocument->saveXML($child); 
    } 

    return $innerHTML; 
} 

Here是顯示輸出的工作鏈接。

注意,我剛剛結束在這裏面你的XML -

'<?xml version="1.0"?> 
     <abc:response xmlns:abc="http://api-url">' 
       .$yourxml 
     .'</abc:response>'; 

我用我從這裏PHP DOM get nodevalue html? (without stripping tags)得到了解決......被卡住了類似的問題,這些天。