2012-12-13 103 views
2

我通過API接收XML文件並使用PHP/SimpleXML/XPath解析它。如何從XML文件中的HTML內容中刪除名稱空間

我需要從其中一個包含HTML的字段獲取數據並輸出它,但是HTML都帶有前綴「h:」名稱空間。

示例XML:

<xmlfeed> 
<title>Title Here</title> 
    <a:content xmlns:a="http://www.w3.org/2005/Atom" xmlns:h="http://www.w3.org/1999/xhtml"> 
    <h:table xmlns:h="http://www.w3.org/1999/xhtml" width="1360" height="259" cellspacing="0" cellpadding="0" border="0"> 
    <h:tbody><h:tr><h:td width="35%" colspan="3"></h:td></h:tr></h:tbody> 
    </h:table> 
    <h:h3 xmlns:h="http://www.w3.org/1999/xhtml">Test heading here</h:h3> 
    <h:a href="link.php">Link Here</h:a> 
</a:content> 
</xmlfeed> 

如何可以解析內的所有HTML:內容刪除「H:」前綴從每個元素以及命名空間?

謝謝。

+0

1)請向我們展示您的代碼;我們添加代碼要比從頭開始設計更容易; 2)當你說「刪除命名空間」你的意思是「刪除命名空間前綴聲明」? – LarsH

+1

1.我真的沒有太多,基本上只是$ course_info = $ xml-> xpath('// a:content');並想要echo $ course_info來獲取HTML。 2.是的,我的意思是刪除NS前綴聲明,謝謝。 我不認爲我在這裏嘗試了任何新東西,並且刪除它們並獲取常規HTML可能很容易。 – Ryan

+0

注意:我是一名開發人員,只是使用XML,並被要求輸出該字段的HTML。如果這應該通過前端的名稱空間聲明(所有瀏覽器都能理解)來處理,這樣HTML將被視爲沒有前綴,那麼這些信息也會很有用。 – Ryan

回答

0

我必須在文檔中掩蓋this

過了一小會兒找到,但以下似乎運作良好:

$content = $xpath->query('a:content/h:*', $context); 
foreach ($content as $piece) 
{ 
    $piece->removeAttributeNS('http://www.w3.org/1999/xhtml', 'h'); 
    $html_content .= $dom->saveXML($piece); 
} 

希望這可以幫助其他人試圖解決同樣的問題。

0

我不太熟悉PHP或simpleXML,但由於沒有其他人回答,我會採取刺探。 (我確實知道XML和XPath。)

您輸入的<a:content>元素的子元素是XHTML元素。大多數瀏覽器都會識別XHTML。這是XHTML命名空間中的XML詞彙表,它與HTML非常接近。

所以我不認爲你需要刪除任何命名空間。而是選擇<a:content>的孩子,使用

$xml->xpath('//a:content/node()') 

並輸出每一個。 (聽起來像是你需要序列化各一臺,不只是附和他們的價值。)

注意,爲了使上述XPath表達式來工作,你首先需要註冊a命名空間前綴(見registerXPathNamespace和實例有) 。

希望這可以讓你更進一步。如果您還有其他問題,請告訴我。

相關問題