用标记名称中的冒号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 ::儿童