我点击了一项服务,我得到的数据如下面的xml。
<?xml version='1.0'?>
<Properties>
<Property>
<Prop_Class>Residential</Prop_Class>
<Prop_RefId>Resads - FHGS - 2034 - 160 - 067546</Prop_RefId>
<Prop_CompanyGroup>ma</Prop_CompanyGroup>
<Prop_CompanyName>Propertysvhavs</Prop_CompanyName>
<Prop_Locality>30</Prop_Locality>
<Prop_Address1>3 Bedroom houses</Prop_Address1>
<Prop_Address2></Prop_Address2>
<Prop_Address3>Clare Road</Prop_Address3>
<Prop_Address4></Prop_Address4>
<Prop_Eircode></Prop_Eircode>
<Prop_Latitude>533.3498</Prop_Latitude >
<Prop_Longitude>623.260300000000029</Prop_Longitude >
<Prop_Status>A</Prop_Status>
<Prop_SaleOrRent>Sale</Prop_SaleOrRent>
<Prop_SaleType>For Sale</Prop_SaleType>
<Prop_Type>Residential Apartment</Prop_Type>
<Prop_Bedrooms>1</Prop_Bedrooms>
<Prop_Bathrooms>3</Prop_Bathrooms>
<Prop_FullDescription></Prop_FullDescription>
<Prop_Price></Prop_Price>
<Prop_PriceOption>m</Prop_PriceOption>
<Prop_ShowPrice>Y</Prop_ShowPrice>
<Prop_Negotiator>Philip O'Reilly - Test </Prop_Negotiator>
<Prop_EnergyRating>A2</Prop_EnergyRating>
<Prop_EnergyRatingDetails>A2</Prop_EnergyRatingDetails>
</Property>
</Properties>
<?xml version='1.0'?>
<Images>
<Image>
<Prim_RefId>Resads - FHGS - 2034 - 160 - 067546</Prim_RefId>
<Prim_CompanyGroup>ma</Prim_CompanyGroup>
<Prim_Type>PA</Prim_Type>
<Prim_Filename>http://www.prhjsgdh.ie/uploads/web/286_3 bed dev.jpg</Prim_Filename>
<Prim_Status>A</Prim_Status>
<Prim_Class>Residential</Prim_Class>
</Image>
<Image>
<Prim_RefId>Resads - FHGS - 2034 - 160 - 067546</Prim_RefId>
<Prim_CompanyGroup>ma</Prim_CompanyGroup>
<Prim_Type>PA</Prim_Type>
<Prim_Filename>http://www.hashjshd.ie/uploads/web/286_3bedsemi-2014.jpg</Prim_Filename>
<Prim_Status>A</Prim_Status>
<Prim_Class>Residential</Prim_Class>
</Image>
<Image>
<Prim_RefId>Resads - FHGS - 2034 - 160 - 067546</Prim_RefId>
<Prim_CompanyGroup>ma</Prim_CompanyGroup>
<Prim_Type>PA</Prim_Type>
<Prim_Filename>http://www.asdbjhsdh.ie/uploads/web/286_3 bed dev.jpg</Prim_Filename>
<Prim_Status>A</Prim_Status>
<Prim_Class>Residential</Prim_Class>
</Image>
</Images>
但此XML包含2 <?xml version='1.0'?>
。所以我无法获取文件内容。
有没有办法将文件作为XML?
甚至是将文件拆分为<?xml version='1.0'?>
的出现次数的任何方法?
答案 0 :(得分:2)
没有办法直接使用任何XML处理库来读取它,因为它是一个无效的XML文档。虽然我有两种方法可以做到这一点。
第一个涉及操纵<?xml ?>
标记使其成为普通标记并将整个文档包装在公共标记中(在这种情况下为<base>
,但这并不重要)。然后你可以正常加载整个文档并提取数据......
$data = str_replace(["<?", "?>"], ["<", "/>"], $data);
$xml = simplexml_load_string("<base>".$data."</base>");
foreach ( $xml->Properties->Property as $property ) {
echo $property->Prop_RefId.PHP_EOL;
}
echo PHP_EOL;
foreach ( $xml->Images->Image as $image ) {
echo $image->Prim_RefId.PHP_EOL;
}
echo PHP_EOL;
您需要记住的是,现有结构上方有一个级别,这就是我引用$xml->Properties->Property
的原因。
第二种是将文档拆分成它的部分。使用explode()
将<?xml ?>
标记作为分隔符,然后照常处理每个部分。不利的一面是,如果声明发生变化,那么这将失败。这样做的好处是,如果您传递了原始XML文档,它的工作方式也是一样的。
$list = explode("<?xml version='1.0'?>", $data );
$xml = simplexml_load_string ( $list[1] );
foreach ( $xml->Property as $property ) {
echo $property->Prop_RefId.PHP_EOL;
}
echo PHP_EOL;
$xml = simplexml_load_string ( $list[2] );
foreach ( $xml->Image as $image ) {
echo $image->Prim_RefId.PHP_EOL;
}
echo PHP_EOL;