質問
ってのXMLを以下のコードは、最初のインスタンスを使用した数simplexml_load_file.現在のphpコードが非常に簡単なし
if (file_exists('test.xml')) {
$xml = simplexml_load_file('test.xml');
print_r($xml);
} else {
exit('Failed to open test.xml.');
}
しかしこのファイルではまず、構文解析エラーのURI PostcodeAnywhereなります。最終的にスクリプトをスローのエラー'文字列を解析できなかったとしてXML'.
のXMLファイルの中身そのものになるように検証すると見せないます。
<?xml version="1.0" encoding="utf-8"?>
<DataSet xmlns="PostcodeAnywhere">
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Table1">
<xs:complexType>
<xs:sequence>
<xs:element name="Id" type="xs:string" minOccurs="0" />
<xs:element name="Name" type="xs:string" minOccurs="0" />
<xs:element name="Items" type="xs:string" minOccurs="0" />
<xs:element name="BillingModel" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns="">
<Table1 diffgr:id="Table11" msdata:rowOrder="0" diffgr:hasChanges="inserted">
<Id>3898</Id>
<Name>DIA Members</Name>
<Items />
<BillingModel>PREPAID</BillingModel>
</Table1>
</NewDataSet>
</diffgr:diffgram>
</DataSet>
解決
のSimpleXMLは、無効な名前空間宣言をのどに詰まらされています。あなたは、元のXMLを制御しますか?その場合は、名前空間を削除するか、またはURNを使用するためにそれを修正することができます。そうでなければ、悪い名前空間を無視するのlibxmlでのオプションがあるかもしれない?
<!-- no namespace -->
<DataSet>
<!-- URN -->
<DataSet xmlns="urn:PostcodeAnywhere">
編集:私はそれを修正してみましょう、SimpleXMLのは、のチョーキングのではない、それは単に大声でその喉をクリアしています。あなたは警告の束を得るが、それはすべて、のSimpleXMLElementが作成さだと私は見ることができたものから、仕事に思えます。あなたがソースXMLを修正することはできませんと警告があなたを気にする場合は、あなただけの、ロード中にエラー報告をオフにすることができますので、同様ます:
libxml_use_internal_errors(false);
$xml = simplexml_load_file('test.xml');
libxml_use_internal_errors(false);
他のヒント
わからない、XML様もを削除する必要があるの <? ?>
宣言しました。) 原則として、XMLパーサ自体は非常に詳細ないか間違っています。
車のパーサの誤ることができますが、
on
error_reporting()
またはの組み合わせを使用
libxml_use_internal_errors()
やlibxml_get_errors()
表示の構文解析エラー。