37

SimpleXMLを使おうとしていますが、次のようなXMLは好きではないようです。

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

では、どのライブラリがそのようなタグ(コロンが含まれている)を処理するのでしょうか?

4

4 に答える 4

85

このような 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;
于 2010-04-23T06:50:12.703 に答える
27

すぐに修正したい場合は、次のようにします(怠け者のときはそうします)

// 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).

于 2011-08-28T01:07:54.210 に答える
6

コロンはXML名前空間を示します。DOMは名前空間を適切にサポートしています。

于 2009-10-16T00:10:42.313 に答える
2

一部の人々が提案したように、コロンを取り除いたり、別のものに置き換えたりするのは良い考えではないと思います. 名前空間プレフィックスを持つ要素に簡単にアクセスできます。名前空間を識別する URL を引数として children() メソッドに渡すか、名前空間プレフィックスと「true」を children() メソッドに渡すことができます。2 番目の方法では、PHP 5.2 以降が必要です。

SimpleXMLElement::子

于 2013-02-22T14:47:40.013 に答える