1

SimpleXML を使用して xml ファイルを読み込んでいます。イメージタグを削除すると、情報が読み取られます。私の URL は HTTPS であり、読みたいと思います。さまざまな文字エスケープ文字を使用しましたが、成功しませんでした。

ここに私が怒っている単純なxmlがあります: url_xml

<?xml version="1.0" encoding="utf-8"?>
<Image>
<ImageID>https://x.ctrl.com/Image.ashx?Id=e1f47a89-c289-43e1-a2c2-0d35196a97ee&userId=7414</ImageID>
<ImageURL>https://x.ctrl.com/Image.ashx?Id=e1f47a89-c289-43e1-a2c2-0d35196a97ee&userId=7414</ImageURL>
<TempImageURL>https://x.ctrl.com/Image.ashx?Id=e1f47a89-c289-43e1-a2c2-0d35196a97ee&userId=7414</TempImageURL>
</Image>

xml php script

<?php
$xml_source='url_xml.xml';

@$xml=simplexml_load_file($xml_source);
echo $xml->getName() . "<br>";

foreach($xml->children() as $child)
  {
      echo $child->getName() . ": " . $child . "<br>";
   }

?>

PHP エラー:

Fatal error: Call to a member function getName() on a non-object in

4

2 に答える 2

1

XML のエスケープに問題があります。

&で逃げる&amp;

このような

<?xml version="1.0" encoding="utf-8"?>
<Image>
    <ImageID>https://x.ctrl.com/Image.ashx?Id=e1f47a89-c289-43e1-a2c2-0d35196a97ee&amp;userId=7414</ImageID>
    <ImageURL>https://x.ctrl.com/Image.ashx?Id=e1f47a89-c289-43e1-a2c2-0d35196a97ee&amp;userId=7414</ImageURL>
    <TempImageURL>https://x.ctrl.com/Image.ashx?Id=e1f47a89-c289-43e1-a2c2-0d35196a97ee&amp;userId=7414</TempImageURL>
</Image>

このため、XML を解析できませんでした。また、エラー抑制演算子@を から削除し@$xml、単にロードして、$xml=simplexml_load_file($xml_source);どこが間違っていたかを知ることができます。

于 2013-09-30T14:47:38.700 に答える
1

私の知識に基づいた推測 ( getName()を 2 回呼び出して、エラー メッセージから行番号を削除したため) は、エラーが次の場所にあるということです。

@$xml=simplexml_load_file($xml_source);
echo $xml->getName() . "<br>";

simplexml_load_file()は失敗した場合にのみ非オブジェクトを返すことができるため、それが起こっていると思います。整形式の XML ドキュメントがないか、指定されたファイルが読み取れません。Google で見つけたランダムな XML バリデータによると、これが最初のケースです。

ドキュメントは整形式ではありません
エンティティ「userId」への参照は「;」で終わる必要があります デリミタ。

 .../Image.ashx?Id=e1f47a89-c289-43e1-a2c2-0d35196a97ee&userId=7414</ImageID>
                                                              ^

(通常は、XML ファイルを Web ブラウザにロードするだけで、エラーが通知されます。)

ほとんどの XML パーサー (SimpleXML を含む) は、整形式のデータに対してのみ機能します。

は XML コンテキストで特別な意味を持つため&、 としてエンコードする必要があります&amp;。XML があなたのものである場合は、XML コードを手動で生成しないことをお勧めします。

于 2013-09-30T14:53:52.187 に答える