2

I'm trying to parse a XML file, but when loading it simpleXML prints the following warning:

Warning: simplexml_load_file() [function.simplexml-load-file]: gpr_545.xml:55: parser error : Entity 'Oslash' not defined in import.php on line 35

This is that line:

<forenames>B&Oslash;IE</forenames><x> </x>

As it is a warning, I might ignore it, but I'd like to understand what is happening.

4

5 に答える 5

3

Ø のような HTML エンティティは、XML エンティティと同じではありません。HTML エンティティを XML エンティティに置き換えるための表を次に示します。

あなたのコメントの 1 つから別の投稿までわかるように、エンティティ /. これが有効な HTML エンティティであるかどうかもわかりません。私の Firefox は文字を表示せず、エンティティ名のみを出力します。しかし、ほとんどのエンティティとそのキャラクター参照番号については別の表を見つけました。それらを置換テーブルに追加してみてください。安全です。/ の整理番号は / です。

于 2009-09-15T12:32:37.603 に答える
2

これはエンコードの問題だと思います。php、この特定のケースでは simplexml は、その fornames タグにあるデンマーク語の O が好きではありません。ファイル全体を utf-8 でエンコードし、それによってエスケープされたバージョンをタグから削除することができます。その後、完全にエスケープされた文字のないファイルを simplexml に読み込むことができます。

K

于 2009-09-15T12:29:13.910 に答える
1

非常によく似た問題があり、次の方法で解決しました。主なアイデアは、ファイルを文字列にロードし、「[[entity]]Oslash;」のようなものですべての悪いエンティティを置き換えることでした。一部のxmlノードを表示する前に、逆置換を実行します。

function readXML($filename){
    $xml_string = implode("", file($filename));
    $xml_string = str_replace("&", "[[entity]]", $xml_string);
    return simplexml_load_string($xml_string);
}
function xml2str($xml){
    $str = str_replace("[[entity]]", "&", (string)$xml);
    $str = iconv("UTF-8", "WINDOWS-1251", $str);
    return $str;
}
$xml = readXML($filename);
echo xml2str($xml->forenames);

iconv("UTF-8", "WINDOWS-1251", $str) ページに "WINDOWS-1251" エンコーディングがあるため

于 2013-01-30T09:37:42.603 に答える
0

この行を使用してみてください:

<forenames><![CDATA[B&Oslash;IE]]></forenames><x> </x>

CDATAについてこれを読んでください

于 2009-09-15T12:33:00.330 に答える