PHP从xml文件获取特定数据

时间:2018-08-10 07:04:24

标签: php xml

这是XML文件。

<?xml version="1.0" encoding="utf-8"?>
<UW xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/XMLSchema.xsd">
  <UWdata>
    <List>
      <IdProduct>1</IdProduct>
      <ProductName>product</ProductName>
      <ProductNameDE>product</ProductNameDE>
      <ProductNameEN>product</ProductNameEN>
      <Uf>1</Uf>
      <PSIg>1</PSIg>
      <Ug>1</Ug>
    </List>
  </UWdata>
</UW> 


$lines_array=file($url);
$lines_string=implode('',$lines_array);
$xml=simplexml_load_string($lines_string) or die("Error: Cannot create object");

我尝试这个

echo $xml->UWdata[1]->ProductName;

但是它什么也没有返回。我想返回产品名称。

3 个答案:

答案 0 :(得分:1)

示例代码,使用simplexml_load_string

<?php
$a = '<?xml version="1.0" encoding="utf-8"?>
<UW xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/XMLSchema.xsd">
  <UWdata>
    <List>
      <IdProduct>1</IdProduct>
      <ProductName>product</ProductName>
      <ProductNameDE>product</ProductNameDE>
      <ProductNameEN>product</ProductNameEN>
      <Uf>1</Uf>
      <PSIg>1</PSIg>
      <Ug>1</Ug>
    </List>
  </UWdata>
</UW>';

$xml=simplexml_load_string($a) or die("Error: Cannot create object");

echo ($xml->UWdata->List->ProductName);
?>

答案 1 :(得分:0)

当您使用 php simplexml_load_file 函数将 xml 文件加载到变量时。名副其实的变成了对象。

<?php 
$xml=simplexml_load_file("/path/to/the/file.xml");
?>

因此,在您的情况下,$xml 变量成为一个多级对象,其中 xml 文件的每个元素都是该对象的关键。比如:UWdata。 因此,由于 $xml 是一个多级对象,要访问 UWdata 下、ListProductName 下的元素,您必须像下面这样编码。

echo $xml->UWdata->List->ProductName."<br>";

在这里, UWdata$xml 对象的键。

ListUWdata 的键。

ProductNameList 的键。

最后,您将获得关键元素的值 ProductName = product

答案 2 :(得分:-1)

我修改了您的脚本,并将xml正确地放在了名为testxml.xml的外部文件中。始终将函数和应该处理的数据分开。我这样使用您的xml:

<?xml version="1.0" encoding="utf-8"?>
<UW xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/XMLSchema.xsd">
  <UWdata>
    <List>
      <IdProduct>1</IdProduct>
      <ProductName>productTEST</ProductName>
      <ProductNameDE>product</ProductNameDE>
      <ProductNameEN>product</ProductNameEN>
      <Uf>1</Uf>
      <PSIg>1</PSIg>
      <Ug>1</Ug>
    </List>
  </UWdata>
</UW>

并且使用以下脚本,它仅返回productTEST

$xmlstr = file_get_contents('./testxml.xml');
$xml = simplexml_load_string($xmlstr);
$json = json_encode($xml);
$array = json_decode($json,TRUE);
echo $array['UWdata']['List']['ProductName'];

希望这会有所帮助。

//编辑: 虽然我不知道您的项目,但如果您的xml可能包含多个List元素,您可能想采取一个foreach方法