質問

っての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パーサ自体は非常に詳細ないか間違っています。

車のパーサの誤ることができますが、

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top