私は 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;
ただし、日付フィールドが必要な場合は、これ:$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 [〜#〜] は名前空間を適切にサポートしています。
一部の人々が示唆したように、コロンを取り除くか、それを他のものに置き換えるのは良い考えではないと思います。名前空間接頭辞を持つ要素に簡単にアクセスできます。ネームスペースを識別するURLを引数としてchildren()メソッドに渡すか、ネームスペースプレフィックスと "true"をchildren()メソッドに渡すことができます。 2番目のアプローチでは、PHP 5.2以降が必要です。