为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

喵喵时光机 2019-10-11 10:08:39
我一直在尝试使用SimpleXML,但它似乎并不喜欢看起来像这样的XML:<xhtml:div>sample <xhtml:em>italic</xhtml:em> text</xhtml:div>那么,哪个库将处理看起来像这样的标签(其中带有冒号)?
查看完整描述

3 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

假设您有一些这样的xml。


<xhtml:div>

  <xhtml:em>italic</xhtml:em>

  <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;


查看完整回答
反对 回复 2019-10-11
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

如果您想快速修复它,请执行以下操作(我感到懒惰时会这样做):


// 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标记名称,可能会失败,但是我想您通常可以安全地使用它(还没有让我失败)。


查看完整回答
反对 回复 2019-10-11
?
慕森卡

TA贡献1806条经验 获得超8个赞

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


SimpleXMLElement :: children


查看完整回答
反对 回复 2019-10-11
  • 3 回答
  • 0 关注
  • 480 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信