1

コントローラーを使用してMagentoのカスタムモジュールから配信されている、比較的大規模ではあるが巨大ではないXMLファイルに取り組んでいます。すべてが順調に進んでおり、問題なく機能させ、ノードを追加することができました。ブラウザー (この場合は Chrome) は、XML ドキュメントを適切にレンダリングし、期待どおりにスタイルを設定しています。Magento 経由で XML ヘッダーを適切に表示するために、次のコードを使用しています。

/* Set display to render output as an XML document */
$this->loadLayout(false);
$this->getResponse()->setHeader('Content-Type','text/xml');
echo "<Magento >";
.
.
.
echo "</Magento>\n";
$this->renderLayout();

出力が 140 ノードに達すると、フォーマットされた XML としてのレンダリングを停止し、あたかも HTML としてレンダリングされているかのようにデータを表示し、ノード定義を認識しません。例:

正しくレンダリングされない

ノードをコメントアウトして 139 個あると、適切にレンダリングされます。完全な 140 以上のノードの XML ページをファイルとして保存し、そのファイルを Chrome にドロップすると、適切にレンダリングされます。例えば:

正しくレンダリング

バリデーターを介して 140 以上のノードの XML ファイルを実行すると、有効な XML コードとして取得されます。代わりに Firefox を使用してページを表示すると、レンダリング表示が壊れるという同じ結果が得られます。

質問。Magento コントローラー経由で配信できる XML ファイルの大きさに制限はありますか? もしそうなら、これが適切にレンダリングされるように、この制限を 139 ノード以上にリセットできますか? 逆に、ページはブラウザーではなく別のプログラムで使用されるため、ブラウザーがページを適切にレンダリングしているかどうかについて心配する必要はありませんか?

4

2 に答える 2

4

ヘッダーを確認してくださいcurl。設定されていないと思います。

curl -I http://example.com

ヘッダーを直接設定してみてください

header('Content-Type: text/xml');

応答オブジェクトにヘッダーを設定すると、応答オブジェクトを介して配信されるコンテンツにのみ影響します。echoコードを直接実行しているため、応答オブジェクトがヘッダーを送信する機会はありません。

ChromeとFirefoxの両方に、ドキュメントのレンダリング方法を推測しようとする一連のヒューリスティックがあります。ヘッダーがある場合でもtext/html、短いXMLドキュメントがXMLとして検出され、XMLレンダリングがトリガーされる場合があります。一定の長さに達すると、ブラウザはそれがHTMLドキュメントであると推測し、HTMLレンダリングエンジンが引き継ぎます。

ヘッダーが正しく設定されていることを確認すると、問題が解決するはずです。

于 2012-09-28T17:46:44.897 に答える
0

通常、この問題は、タグを壊す (閉じない) か、サポートされていない文字を挿入したときに発生します。XML の不明なサイズ制限です。おそらく、ブラウザの検証がクラッシュしています。

于 2012-09-28T14:36:04.737 に答える