2012-10-10 41 views
5

Tôi vẫn còn khá mới với SimpleXml. Những gì tôi đang cố gắng làm:Cách lấy innerText của một phần tử với SimpleXml

Tôi có nhiều tệp xml, được xây dựng giống nhau. Vấn đề của tôi là đôi khi có nhiều nút hơn trong nút đích của tôi. Ví dụ (cố gắng để có được cơ thể):

xml-file 1

<?xml version="1.0" encoding="ISO-8859-1"?> 
<note> 
<firstname>My name is WHAT</firstname> 
<lastname>My name is WHO</lastname> 
<body>My name is CHIKA CHIKA Slim-Shady</body> 
</note> 

xml-file 2

<?xml version="1.0" encoding="ISO-8859-1"?> 
<note> 
<firstname>My name is WHAT</firstname> 
<lastname>My name is WHO</lastname> 
<body><b>My name is CHIKA CHIKA Slim-Shady</b></body> 
</note> 

tôi có thể nhận được văn bản trong các tập tin đầu tiên với không có vấn đề:

$xml = simplexml_load_file("filename.xml"); 
echo $xml->note->body; 

Nhưng khi tôi cố gắng làm như vậy trong tệp thứ hai, tôi không nhận được gì.

Làm cách nào để nhận php chỉ nhổ văn bản trong nút, mà không quan tâm đến bất kỳ nút bổ sung nào trong nút đích?

Trả lời

9

Để cho traversal

echo $xml->note->body; 

Để làm việc, đánh dấu của bạn sẽ cần phải

<note> 
    <note> 
     <body> 
     … 

Để tránh sai sót như vậy, đó là thực hành tốt để đặt tên cho biến bạn simplexml_load_file vào sau phần tử gốc trong đánh dấu, ví dụ

$note = simplexml_load_string($xml); 

Để có được "innerText" của một SimpleXMLElement bạn có thể làm:

echo strip_tags($note->body->asXml()); 

phương pháp asXML() sẽ cung cấp cho bạn "outerXML" mà bạn sau đó loại bỏ với strip_tags.

Việc thay thế sẽ được nhập khẩu các nút vào DOM và sau đó nhận được nó nodeValue

echo dom_import_simplexml($note->body)->nodeValue; 
+0

Wow nhanh quá ... không mong đợi được nhiều câu trả lời chỉ trong vài phút. – noClue

+0

Sau khi kêu leng keng trong một thời gian, cuối cùng tôi đã làm việc đó. Nhiều tnx! – noClue

+1

Tôi ghét khi mọi người trong các cuộc thảo luận như vậy chỉ nói "Tôi đã làm việc đó" thay vì gửi CÁCH họ đã làm việc đó btw. strip_tags sẽ xóa TẤT CẢ thẻ, bao gồm các thẻ từ innerXml – Algoman

0

Bạn không cần phải thêm note Nó phải là

Đầu Một

echo $xml->body; 

Second Một

echo $xml->body->b ; 

Output

My name is CHIKA CHIKA Slim-Shady 
+0

trong khi nó là chính xác lưu ý đó là sai ở đây, nó chỉ giải quyết được một nửa của vấn đề vì điều này sẽ không tạo ra sản lượng bạn nghĩ nó sẽ: http://codepad.org/LiireTxn – Gordon

+0

Bản chỉnh sửa bỏ lỡ câu hỏi: * Làm thế nào tôi có thể nhận php để chỉ nhổ văn bản trong một nút, mà không quan tâm đến bất kỳ nút bổ sung nào trong nút đích? * – Gordon

+0

'I có thể nhận được văn bản trong tệp đầu tiên không có vấn đề gì: 'mâu thuẫn rằng .....' $ xml-> note-> body' không hoạt động trên bất kỳ định dạng nào – Baba

Các vấn đề liên quan