2009-10-20 23 views
6

Xin chào Tôi có một câu trả lời api ở định dạng xml với một loạt các mặt hàng như thế này:PHP DOMDocument nhận được Thuộc tính của Tag

<item> 
<title>blah balh</title> 
<pubDate>Tue, 20 Oct 2009 </pubDate> 
<media:file date="today" data="example text string"/> 
</item> 

Tôi muốn sử dụng DOMDocument để có được những thuộc tính "dữ liệu" từ khóa " phương tiện: tệp ". Nỗ lực của tôi dưới đây không hoạt động:

$xmldoc = new DOMDocument(); 
$xmldoc->load('api response address'); 
foreach ($xmldoc->getElementsByTagName('item') as $feeditem) { 
$nodes = $feeditem->getElementsByTagName('media:file'); 
$linkthumb = $nodes->item(0)->getAttribute('data'); 
} 

Tôi đang làm gì sai? Hãy giúp tôi.

EDIT: Tôi không thể để lại nhận xét vì một số lý do Mark. Tôi gặp lỗi

Call to a member function getAttribute() on a non-object 

khi tôi chạy mã của mình. Tôi cũng đã thử

$nodes = $feeditem->getElementsByTagNameNS('uri','file'); 
$linkthumb = $nodes->item(0)->getAttribute('data'); 

trong đó uri là uri liên quan đến không gian tên phương tiện (NS) nhưng lại cùng một vấn đề.

Lưu ý rằng phần tử phương tiện có dạng không phải là tôi nghĩ rằng đây là một phần của vấn đề, vì tôi thường không phân tích vấn đề cho các thành viên.

Trả lời

8

Ví dụ bạn đã cung cấp không được tạo lỗi. Tôi đã thử nghiệm nó và $ linkthumb chứa chuỗi "chuỗi văn bản mẫu" như mong đợi

Đảm bảo không gian tên được định nghĩa trong XML trả về nếu không DOMDocument sẽ lỗi.

Nếu bạn đang nhận được một lỗi cụ thể, xin vui lòng chỉnh sửa bài viết của bạn để bao gồm nó

Edit:

Hãy thử đoạn mã sau:

$xmldoc = new DOMDocument(); 
$xmldoc->load('api response address'); 
foreach ($xmldoc->getElementsByTagName('item') as $feeditem) { 
    $nodes = $feeditem->getElementsByTagName('file'); 
    $linkthumb = $nodes->item(0)->getAttribute('data'); 
    echo $linkthumb; 
} 

Bạn cũng có thể muốn xem xét SimpleXMLXpath vì nó làm cho việc đọc XML dễ dàng hơn nhiều so với DOMDocument.

+0

Điều đó đã làm nó, mã thêm. Cảm ơn bạn !! –

3

Ngoài ra,

$DOMNode -> attributes -> getNamedItem('MyAttribute') -> value; 
Các vấn đề liên quan