Arrays 使用PHP将XML转换为数组,但返回错误

Arrays 使用PHP将XML转换为数组,但返回错误,arrays,xml,curl,Arrays,Xml,Curl,我正在使用API并以以下形式返回XML,需要一些专家帮助: <?xml version="1.0" encoding="UTF-8"?> <Data xmlns="http://www.apilink.com/schema/data" xmlns:dmd="http://www.apiurl.com/schema/data-metadata" dmd:date="2018-05-04"> <Record userId="12323" username="mabbot

我正在使用API并以以下形式返回XML,需要一些专家帮助:

<?xml version="1.0" encoding="UTF-8"?>
<Data xmlns="http://www.apilink.com/schema/data" xmlns:dmd="http://www.apiurl.com/schema/data-metadata" dmd:date="2018-05-04">
<Record userId="12323" username="mabbott" termId="809" dmd:surveyId="2153479">
    <dmd:IndexEntry indexKey="DEPARTMENT" entryKey="Accountancy" text="Accountancy"/>
    <PCI id="4354343" dmd:lastModified="2018-05-04T09:46:52">
        <PREFIX>Ms.</PREFIX>
        <FNAME>Mark</FNAME>
        <PFNAME/>
        <MNAME>Marie</MNAME>
        <LNAME>Abbotto</LNAME>
        <SUFFIX/>
        <ALT_NAME/>
        <ENDPOS/>
        <EMAIL>mabbotto@site.net</EMAIL>
        <BUILDING>Car Center</BUILDING>
        <ROOMNUM>280</ROOMNUM>
        <OPHONE1>232</OPHONE1>
        <OPHONE2>212</OPHONE2>
        <OPHONE3>2323</OPHONE3>
        <DPHONE1/>
        <DPHONE2/>
        <DPHONE3/>
        <FAX1/>
        <FAX2/>
        <FAX3/>
        <PCI_WEBSITE id="435435">
            <WEBSITE/>
        </PCI_WEBSITE>
        <BIO/>
        <TEACHING_INTERESTS/>
        <RESEARCH_INTERESTS/>
        <CONSULT_INTEREST/>
        <UPLOAD_PHOTO/>
    </PCI>
</Record>
<Record userId="435335435" username="jdoe" termId="809" dmd:surveyId="3244354335">
    <dmd:IndexEntry indexKey="DEPARTMENT" entryKey="words and stuff" text="stuff"/>
    <PCI id="546546546" dmd:lastModified="2018-05-04T09:46:53">
        <PREFIX>Ms.</PREFIX>
        <FNAME>Traci</FNAME>
        <PFNAME/>
        <MNAME>B</MNAME>
        <LNAME>Lee</LNAME>
        <SUFFIX/>
        <ALT_NAME/>
        <ENDPOS/>
        <EMAIL>jdoe@mysite.com</EMAIL>
        <BUILDING>101 Academic Center</BUILDING>
        <ROOMNUM>232</ROOMNUM>
        <OPHONE1>121</OPHONE1>
        <OPHONE2>891</OPHONE2>
        <OPHONE3>0000</OPHONE3>
        <DPHONE1/>
        <DPHONE2/>
        <DPHONE3/>
        <FAX1/>
        <FAX2/>
        <FAX3/>
        <PCI_WEBSITE id="22209488897">
            <WEBSITE/>
        </PCI_WEBSITE>
        <BIO>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus nec volutpat tellus. Suspendisse elementum faucibus laoreet. Donec blandit enim non tincidunt lacinia. Etiam imperdiet leo at lorem pretium, at aliquet dui porttitor. Vestibulum egestas dictum accumsan. Morbi ullamcorper libero sit amet diam sodales volutpat. Mauris eu ligula vitae erat lacinia consectetur sit amet vitae ligula. Phasellus feugiat scelerisque vulputate. Fusce commodo velit a augue pellentesque interdum. Sed eleifend dignissim quam gravida congue. Ut a ullamcorper sapien, eget accumsan purus. Nam ultricies suscipit lacus, quis posuere metus sodales a. Integer sodales sodales massa in ornare. Vivamus semper lacus non nibh faucibus efficitur. </BIO>
        <TEACHING_INTERESTS>Phasellus feugiat</TEACHING_INTERESTS>
        <RESEARCH_INTERESTS>Phasellus feugiat</RESEARCH_INTERESTS>
        <CONSULT_INTEREST/>
        <UPLOAD_PHOTO>folder/1.png</UPLOAD_PHOTO>
    </PCI>
</Record>
</Data>

我得到XML解析错误:格式不正确,XML解析错误:未找到根元素错误


谢谢

当您知道输入是有效的XHTML时,SimpleXML是一个选项。如果需要解析不完整/不严格的XML/HTML,甚至不要考虑SimpleXml,因为它会阻塞。另一方面,DOMDocument在解析非严格有效的XHTML方面要好得多。现在,您提供的示例输入实际上是有效的XML,但您所指的错误是,
格式不正确,并且XML解析错误:未找到根元素错误。
在尝试使用SimpleXml解析非严格XHTML时发生。改用DOMDocument。比如说,

$domd = @DOMDocument::loadHTML ( $xml );
$xp = new DOMXPath ( $domd );
foreach ( $domd->getElementsByTagName ( "record" ) as $record ) {
    $interesting = $xp->query ( './/prefix|.//fname|.//email', $record );
    foreach ( $interesting as $ele ) {
        echo "{$ele->nodeName}: {$ele->textContent}\n";
    }
    echo "-\n";
}
将处理您提供的样品,打印

prefix: Ms.
fname: Mark
email: mabbotto@site.net
-
prefix: Ms.
fname: Traci
email: jdoe@mysite.com
-
而粗糙相当于你的

$movies = new SimpleXMLElement($xmlstr);

echo $movies->movie[0]->plot;
代码为:

$movies=@DOMDocument::loadHTML($xmlstr);

echo $movies->getElementsByTagName("movie")->item(0)->getElementsByTagName("plot")->item(0)->textContent;

可能是重复的谢谢。非常感谢
$movies = new SimpleXMLElement($xmlstr);

echo $movies->movie[0]->plot;
$movies=@DOMDocument::loadHTML($xmlstr);

echo $movies->getElementsByTagName("movie")->item(0)->getElementsByTagName("plot")->item(0)->textContent;