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

mpe*_*pen 32 php xml namespaces simplexml

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

<xhtml:div>sample <xhtml:em>italic</xhtml:em> text</xhtml:div>
Run Code Online (Sandbox Code Playgroud)

那么什么库会处理看起来像这样的标签(在它们中有冒号)?

Nat*_*han 74

假设你有一些像这样的xml.

<xhtml:div>
  <xhtml:em>italic</xhtml:em>
  <date>2010-02-01 06:00</date>
</xhtml:div>
Run Code Online (Sandbox Code Playgroud)

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

但是,如果你想要日期字段,这个:$xml->children('xhtml', true)->div->date; 不会工作,因为你被困在xhtml命名空间中.

您必须再次执行'children'才能返回默认命名空间:

$xml->children('xhtml', true)->div->children()->date;
Run Code Online (Sandbox Code Playgroud)


小智 22

如果你想快速修复它(当我感到懒惰时我会这样做):

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

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

  • 那很脏.但好;) (5认同)

Oll*_*ers 6

Colon表示XML命名空间.该DOM有命名空间很好的支持.