PHP库用于使用标记名称中的冒号来解析XML?

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


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

那么,哪个库将处理看起来像这样的标签(其中带有冒号)?


喵喵时光机
浏览 481回答 3
3回答

白衣非少年

假设您有一些这样的xml。<xhtml:div>&nbsp; <xhtml:em>italic</xhtml:em>&nbsp; <date>2010-02-01 06:00</date></xhtml:div>您可以这样访问“ em”: $xml->children('xhtml', true)->div->em;但是,如果需要日期字段,则此方法将$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_。有点hacky,如果涉及到CDATA NameSpaced XML容器块或UNICODE标记名称,可能会失败,但是我想您通常可以安全地使用它(还没有让我失败)。

慕森卡

我认为摆脱冒号或用某些人建议的其他方式代替冒号不是一个好主意。您可以轻松访问具有名称空间前缀的元素。您可以将标识名称空间的URL传递给children()方法的参数,也可以将名称空间前缀和“ true”传递给children()方法。第二种方法需要PHP 5.2及更高版本。SimpleXMLElement :: children
打开App,查看更多内容
随时随地看视频慕课网APP