0

次のようなヘッダーを持つ xml ファイルがあります。

<!ENTITY nbsp   "&#160;"><!-- no-break space = non-breaking space,
                                   U+00A0 ISOnum -->
 <!ENTITY iexcl  "&#161;"><!-- inverted exclamation mark, U+00A1 ISOnum -->
 <!ENTITY cent   "&#162;"><!-- cent sign, U+00A2 ISOnum -->
 <!ENTITY pound  "&#163;"><!-- pound sign, U+00A3 ISOnum -->
 <!ENTITY curren "&#164;"><!-- currency sign, U+00A4 ISOnum -->
 <!ENTITY yen    "&#165;"><!-- yen sign = yuan sign, U+00A5 ISOnum -->
 <!ENTITY brvbar "&#166;"><!-- broken bar = broken vertical bar,
                                   U+00A6 ISOnum -->
 <!ENTITY sect   "&#167;"><!-- section sign, U+00A7 ISOnum -->
 <!ENTITY uml    "&#168;"><!-- diaeresis = spacing diaeresis,
                                   U+00A8 ISOdia -->
 <!ENTITY copy   "&#169;"><!-- copyright sign, U+00A9 ISOnum -->
 <!ENTITY ordf   "&#170;"><!-- feminine ordinal indicator, U+00AA ISOnum -->
 <!ENTITY laquo  "&#171;"><!-- left-pointing double angle quotation mark
                                   = left pointing guillemet, U+00AB ISOnum -->
 <!ENTITY not    "&#172;"><!-- not sign, U+00AC ISOnum -->
 <!ENTITY shy    "&#173;"><!-- soft hyphen = discretionary hyphen,
                                   U+00AD ISOnum -->
 <!ENTITY reg    "&#174;"><!-- registered sign = registered trade mark sign,
                                   U+00AE ISOnum -->
 <!ENTITY macr   "&#175;"><!-- macron = spacing macron = overline
                                   = APL overbar, U+00AF ISOdia -->
 <!ENTITY deg    "&#176;"><!-- degree sign, U+00B0 ISOnum -->
 <!ENTITY plusmn "&#177;"><!-- plus-minus sign = plus-or-minus sign,
                                   U+00B1 ISOnum -->

dom ドキュメントに読み込もうとすると、ファイルに保存されないようです。上記のコードが解析エラーを引き起こしている可能性があると思います。これらのヘッダーを削除する方法はありますか?

これは私のphpコードです:

$xml = curl_exec($ch);
$srcDom = new DOMDocument;
$srcDom->load($xml);
$xPath = new DOMXPath($srcDom);
foreach ($srcDom->getElementsByTagName('Venue') as $venue) {
    $dstDom = new DOMDocument('1.0', 'utf-8');
    $dstDom->appendChild($dstDom->createElement('EventsPricePoints'));
    $dstDom->documentElement->appendChild($dstDom->importNode($venue, true));

    $allEventsForVenue = $xPath->query(
        sprintf(
            '/Store/EventsPricePoints/Event[VenueID/@ID=%d]',
            $venue->getAttribute('ID')
        )
    );

    foreach ($allEventsForVenue as $event) {
        $dstDom->documentElement->appendChild($dstDom->importNode($event, true));
    }

    $dstDom->formatOutput = true;
    $dstDom->saveXml(sprintf('/var/www/html/venuexml/%d.xml', $venue->getAttribute('ID')));
}
4

2 に答える 2

0

strip_tagsに興味があるかもしれませんが、すべての正当なタグをホワイトリストに登録する必要があります。

于 2012-05-19T13:23:00.773 に答える
0

あなたのコードは解析エラーを引き起こしていません (エラー ログまたはレポートを有効にすると、警告が表示される可能性がありますが、そうではないと思います)。

代わりに、コードが読み込まれます。デフォルトでは XML は UTF-8 でエンコードされているため、使用するすべてのエンティティを転送する必要はありません。XML にはこれらのエンティティの文字を含めることができるため、必要なくこれらのエンティティの文字を含めることができます。

したがって、定義と XML 内のエンティティ自体の両方が不必要です。DOMDocumentそれらを削除するだけだと思います。

さらに、テスト目的で XML チャンクの例を示した場合は、明確化のニーズに対するより具体的な回答が得られます。

于 2012-05-19T14:35:19.457 に答える