使用 PHP 从 XML 中删除命名空间

2022-08-30 19:49:10

我有一个XML文档,看起来像这样:

<Data 
  xmlns="http://www.domain.com/schema/data" 
  xmlns:dmd="http://www.domain.com/schema/data-metadata"
>
  <Something>...</Something>
</Data>

我在PHP中使用SimpleXML解析信息。我正在处理数组,但我似乎遇到了命名空间问题。

我的问题是:如何删除这些命名空间?我从 XML 文件中读取数据。

谢谢!


答案 1

如果您使用的是XPath,那么这是XPath的限制,而不是PHP,请查看xpath和默认命名空间上的此说明以获取更多信息。

更具体地说,是根节点中的属性导致了问题。这意味着您需要注册命名空间,然后使用 QName 来引用元素。xmlns=""

$feed = simplexml_load_file('http://www.sitepoint.com/recent.rdf');
$feed->registerXPathNamespace("a", "http://www.domain.com/schema/data");
$result = $feed->xpath("a:Data/a:Something/...");

重要提示:调用中使用的 URI 必须与实际 XML 文件中使用的 URI 相同。registerXPathNamespace


答案 2

我发现上面的答案很有帮助,但它对我不太有效。这最终效果更好:

// Gets rid of all namespace definitions 
$xml_string = preg_replace('/xmlns[^=]*="[^"]*"/i', '', $xml_string);

// Gets rid of all namespace references
$xml_string = preg_replace('/[a-zA-Z]+:([a-zA-Z]+[=>])/', '$1', $xml_string);

推荐