用标记名称中的冒号parsingXML的PHP​​库?

我一直在试图使用SimpleXML ,但它似乎不喜欢看起来像这样的XML:

<xhtml:div>sample <xhtml:em>italic</xhtml:em> text</xhtml:div> 

那么,什么库将处理标签看起来像(在他们有一个冒号)?

假设你有一些这样的XML。

 <xhtml:div> <xhtml:em>italic</xhtml:em> <date>2010-02-01 06:00</date> </xhtml:div> 

你可以像这样访问'em': $xml->children('xhtml', true)->div->em;

然而 ,如果你想要的date字段,这: $xml->children('xhtml', true)->div->date; 不会工作 ,因为你卡在xhtml命名空间。

你必须再次执行'children'来回到默认的命名空间:

 $xml->children('xhtml', true)->div->children()->date; 

如果你想快速解决这个问题(当我感到懒惰时,我会这样做)

 // Will replace : in tags and attributes names with _ allowing easy access $xml = preg_replace('~(</?|\s)([a-z0-9_]+):~is', '$1$2_', $xml); 

这会将<xhtml:转换为<xhtml_</xhtml:</xhtml_ 。 如果涉及CDATA NameSpaced XML容器块或UNICODE标签名称,但是我会说你通常安全使用它(还没有使我失败)

冒号表示一个XML命名空间。 DOM对命名空间有很好的支持。

我不认为这是一个好主意,以摆脱冒号或用别人的build议replace它。 您可以轻松访问具有名称空间前缀的元素。 您可以将标识名称空间的URL作为parameter passing给children()方法,也可以将名称空间前缀和“true”传递给children()方法。 第二种方法需要PHP 5.2及更高版本。

的SimpleXMLElement ::儿童