SimpleXMLを使おうとしていますが、次のようなXMLは好きではないようです。
<xhtml:div>sample <xhtml:em>italic</xhtml:em> text</xhtml:div>
では、どのライブラリがそのようなタグ(コロンが含まれている)を処理するのでしょうか?
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);
This will convert <xhtml:
to <xhtml_
and </xhtml:
to </xhtml_
.
Kind of hacky and can fail if CDATA NameSpaced XML container blocks are involved or UNICODE tag names but I'd say you are usually safe using it (hasn't failed me yet).
コロンはXML名前空間を示します。DOMは名前空間を適切にサポートしています。
一部の人々が提案したように、コロンを取り除いたり、別のものに置き換えたりするのは良い考えではないと思います. 名前空間プレフィックスを持つ要素に簡単にアクセスできます。名前空間を識別する URL を引数として children() メソッドに渡すか、名前空間プレフィックスと「true」を children() メソッドに渡すことができます。2 番目の方法では、PHP 5.2 以降が必要です。