如何从XML文件中的HTML内容中删除命名空间

时间:2012-12-13 18:50:57

标签: php xml xpath simplexml

我通过API接收XML文件并使用PHP / SimpleXML / XPath进行解析。

我需要从包含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>

如何解析a:content中的所有HTML以从每个元素和名称空间中删除“h:”前缀?

谢谢。

1 个答案:

答案 0 :(得分:0)

我不熟悉PHP或simpleXML,但由于没有其他人回答过,我会对它进行一次尝试。 (我确实熟悉XML和XPath。)

输入中<a:content>元素的子元素是XHTML元素。大多数浏览器都会识别XHTML。它是XHTML命名空间中的XML词汇表,与HTML非常接近。

因此我认为您不需要删除任何名称空间。而是使用

选择<a:content>的子项
$xml->xpath('//a:content/node()')

并输出每一个。 (听起来你需要序列化每一个,而不仅仅是回应它们的价值。)

请注意,为了使上述XPath表达式起作用,首先需要注册a名称空间前缀(请参阅registerXPathNamespace及其中的示例)。

希望这会让你走得更远。如果您还有其他问题,请与我们联系。