PHP库,用于解析标签名称中带有冒号的XML?

2022-08-30 12:33:49

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

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

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


答案 1

假设你有一些这样的xml。

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

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

但是,如果你想要日期字段,this:将不起作用,因为你被困在xhtml命名空间中。$xml->children('xhtml', true)->div->date;

您必须再次执行“子”才能返回到默认命名空间:

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

答案 2

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

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

这将转换为 和 转换为 。有点黑客,如果涉及CDATA NameSpaced XML容器块或UNICODE标签名称,可能会失败,但我想说你通常可以安全地使用它(还没有让我失望)。<xhtml:<xhtml_</xhtml:</xhtml_


推荐