如何使用Php读取XML文件数据?

如何使用Php读取XML文件数据?,php,xml,parsing,Php,Xml,Parsing,我有以下格式的xml文件 <?xml version="1.0" encoding="utf-8" ?> <rss version="2.0" xmlns:g="http://base.google.com/ns/1.0"> <channel> <title>Data feed Title</title> <link>http://www.amarchitrakatha.com/in/</link&

我有以下格式的xml文件

<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">  
  <channel>  
  <title>Data feed Title</title>
  <link>http://www.amarchitrakatha.com/in/</link>
  <description>Data feed description.</description>
    <item>ACKKALID0577
    <g:id><![CDATA[ACKKALID0577]]></g:id>
    <title><![CDATA[Kalidasa]]></title>
    <link><![CDATA[http://www.amarchitrakatha.com/in/kalidasa?fee=19&fep=1147]]></link>
    <g:price>70.00</g:price>
    <g:sale_price></g:sale_price>
    <description><![CDATA[Kalidas Owes His Fame To His Sanksrit Play Abhijnana-Shakuntala (Shakuntala Recognised By The Token Ring), The Long Epic Poem Kumara-Sambhava (Birth Of Kumara) And The Lyric Poem Meghaduta (Cloud Messenger). Kalidasa, Who Lived Some Time In The Middle Of The 4Th And Early 5Th Centuries A.D., Has Left No Account Of His Life. According To Popular Legend, He Owed His Ingenuity As Much To Goddess Kali’S Blessings As To His Own Talents.]]></description>
    <g:product_type><![CDATA[Amar Chitra Katha  > Visionaries > Singles]]></g:product_type>
    <g:google_product_category><![CDATA[]]></g:google_product_category>
    <g:image_link><![CDATA[http://www.amarchitrakatha.com/media/catalog/product/K/A/KALIDASA_0__5.jpg]]></g:image_link>
    <g:condition>new</g:condition>
    <g:availability>in stock</g:availability>
    <g:shipping_weight>0.09 kg</g:shipping_weight>
    <g:brand><![CDATA[]]></g:brand>
    <g:mpn><![CDATA[ACKKALID0577]]></g:mpn>
    <g:gtin><![CDATA[]]></g:gtin>
  </item>
  <item>ACKPRITH1413
    <g:id><![CDATA[ACKPRITH1413]]></g:id>
    <title><![CDATA[Prithviraj Chauhan]]></title>
    <link><![CDATA[http://www.amarchitrakatha.com/in/prithviraj-chauhan?fee=19&fep=1150]]></link>
    <g:price>70.00</g:price>
    <g:sale_price></g:sale_price>
    <description><![CDATA[Jaichand Was Furious! His Daughter Samyogita Had Eloped With Prithviraj Chauhan, The Warrior King Of Delhi. She, Like Many Others, Was Smitten By Tales Of His Daring, His Nobility And His Sense Of Honour. Though The Young Couple’S Happiness Was Doomed, Even In His Dying Hour, It Was The Brave Prithviraj Who Chose How His Life Should End.]]></description>
    <g:product_type><![CDATA[Amar Chitra Katha  > Brave Hearts Story > Singles]]></g:product_type>
    <g:google_product_category><![CDATA[]]></g:google_product_category>
    <g:image_link><![CDATA[http://www.amarchitrakatha.com/media/catalog/product/P/R/PRITHVIRAJ_CHAUHAN_0__4.jpg]]></g:image_link>
    <g:condition>new</g:condition>
    <g:availability>in stock</g:availability>
    <g:shipping_weight>0.09 kg</g:shipping_weight>
    <g:brand><![CDATA[]]></g:brand>
    <g:mpn><![CDATA[ACKPRITH1413]]></g:mpn>
    <g:gtin><![CDATA[]]></g:gtin>
  </item>
 </channel>
</rss>
'; }否则{ 退出('打开Sample.xml失败'); } 我得到的结果是

$xml=simplexml_load_string($yourXMLFile)
$xml->children('g', true)->id;

我必须将项目的数据存储在特定的变量中。

我相信使用这种xml样式,您可以使用标准的PHP xml解析器(即 将其加载到变量中(即$xml) 然后像这样读取这些节点:

<?php
ini_set('display_errors', 1);
$object= new DOMDocument();
$object->loadXML('<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">  
  <channel>  
  <title>Data feed Title</title>
  <link>http://www.amarchitrakatha.com/in/</link>
  <description>Data feed description.</description>
    <item>ACKKALID0577
    <g:id><![CDATA[ACKKALID0577]]></g:id>
    <title><![CDATA[Kalidasa]]></title>
    <link><![CDATA[http://www.amarchitrakatha.com/in/kalidasa?fee=19&fep=1147]]></link>
    <g:price>70.00</g:price>
    <g:sale_price></g:sale_price>
    <description><![CDATA[Kalidas Owes His Fame To His Sanksrit Play Abhijnana-Shakuntala (Shakuntala Recognised By The Token Ring), The Long Epic Poem Kumara-Sambhava (Birth Of Kumara) And The Lyric Poem Meghaduta (Cloud Messenger). Kalidasa, Who Lived Some Time In The Middle Of The 4Th And Early 5Th Centuries A.D., Has Left No Account Of His Life. According To Popular Legend, He Owed His Ingenuity As Much To Goddess Kali’S Blessings As To His Own Talents.]]></description>
    <g:product_type><![CDATA[Amar Chitra Katha  > Visionaries > Singles]]></g:product_type>
    <g:google_product_category><![CDATA[]]></g:google_product_category>
    <g:image_link><![CDATA[http://www.amarchitrakatha.com/media/catalog/product/K/A/KALIDASA_0__5.jpg]]></g:image_link>
    <g:condition>new</g:condition>
    <g:availability>in stock</g:availability>
    <g:shipping_weight>0.09 kg</g:shipping_weight>
    <g:brand><![CDATA[]]></g:brand>
    <g:mpn><![CDATA[ACKKALID0577]]></g:mpn>
    <g:gtin><![CDATA[]]></g:gtin>
  </item>
  <item>ACKPRITH1413
    <g:id><![CDATA[ACKPRITH1413]]></g:id>
    <title><![CDATA[Prithviraj Chauhan]]></title>
    <link><![CDATA[http://www.amarchitrakatha.com/in/prithviraj-chauhan?fee=19&fep=1150]]></link>
    <g:price>70.00</g:price>
    <g:sale_price></g:sale_price>
    <description><![CDATA[Jaichand Was Furious! His Daughter Samyogita Had Eloped With Prithviraj Chauhan, The Warrior King Of Delhi. She, Like Many Others, Was Smitten By Tales Of His Daring, His Nobility And His Sense Of Honour. Though The Young Couple’S Happiness Was Doomed, Even In His Dying Hour, It Was The Brave Prithviraj Who Chose How His Life Should End.]]></description>
    <g:product_type><![CDATA[Amar Chitra Katha  > Brave Hearts Story > Singles]]></g:product_type>
    <g:google_product_category><![CDATA[]]></g:google_product_category>
    <g:image_link><![CDATA[http://www.amarchitrakatha.com/media/catalog/product/P/R/PRITHVIRAJ_CHAUHAN_0__4.jpg]]></g:image_link>
    <g:condition>new</g:condition>
    <g:availability>in stock</g:availability>
    <g:shipping_weight>0.09 kg</g:shipping_weight>
    <g:brand><![CDATA[]]></g:brand>
    <g:mpn><![CDATA[ACKPRITH1413]]></g:mpn>
    <g:gtin><![CDATA[]]></g:gtin>
  </item>
 </channel>
</rss>');
$tagValues=array("g:id","title","link");
$result=array();
foreach($object->getElementsByTagName("item") as $item)
{
    foreach($item->childNodes as $node)
    {
        if($node instanceof DOMElement)
        {
            if(in_array( $node->tagName,$tagValues))
            {
                $result[$node->tagName][]=$node->textContent;
            }
        }
    }
}
print_r($result);
(以上内容将拉取的所有实例)


未测试我的端。

我相信使用这种xml样式,您可以使用标准的PHP xml解析器(即 将其加载到变量中(即$xml) 然后像这样读取这些节点:

<?php
ini_set('display_errors', 1);
$object= new DOMDocument();
$object->loadXML('<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">  
  <channel>  
  <title>Data feed Title</title>
  <link>http://www.amarchitrakatha.com/in/</link>
  <description>Data feed description.</description>
    <item>ACKKALID0577
    <g:id><![CDATA[ACKKALID0577]]></g:id>
    <title><![CDATA[Kalidasa]]></title>
    <link><![CDATA[http://www.amarchitrakatha.com/in/kalidasa?fee=19&fep=1147]]></link>
    <g:price>70.00</g:price>
    <g:sale_price></g:sale_price>
    <description><![CDATA[Kalidas Owes His Fame To His Sanksrit Play Abhijnana-Shakuntala (Shakuntala Recognised By The Token Ring), The Long Epic Poem Kumara-Sambhava (Birth Of Kumara) And The Lyric Poem Meghaduta (Cloud Messenger). Kalidasa, Who Lived Some Time In The Middle Of The 4Th And Early 5Th Centuries A.D., Has Left No Account Of His Life. According To Popular Legend, He Owed His Ingenuity As Much To Goddess Kali’S Blessings As To His Own Talents.]]></description>
    <g:product_type><![CDATA[Amar Chitra Katha  > Visionaries > Singles]]></g:product_type>
    <g:google_product_category><![CDATA[]]></g:google_product_category>
    <g:image_link><![CDATA[http://www.amarchitrakatha.com/media/catalog/product/K/A/KALIDASA_0__5.jpg]]></g:image_link>
    <g:condition>new</g:condition>
    <g:availability>in stock</g:availability>
    <g:shipping_weight>0.09 kg</g:shipping_weight>
    <g:brand><![CDATA[]]></g:brand>
    <g:mpn><![CDATA[ACKKALID0577]]></g:mpn>
    <g:gtin><![CDATA[]]></g:gtin>
  </item>
  <item>ACKPRITH1413
    <g:id><![CDATA[ACKPRITH1413]]></g:id>
    <title><![CDATA[Prithviraj Chauhan]]></title>
    <link><![CDATA[http://www.amarchitrakatha.com/in/prithviraj-chauhan?fee=19&fep=1150]]></link>
    <g:price>70.00</g:price>
    <g:sale_price></g:sale_price>
    <description><![CDATA[Jaichand Was Furious! His Daughter Samyogita Had Eloped With Prithviraj Chauhan, The Warrior King Of Delhi. She, Like Many Others, Was Smitten By Tales Of His Daring, His Nobility And His Sense Of Honour. Though The Young Couple’S Happiness Was Doomed, Even In His Dying Hour, It Was The Brave Prithviraj Who Chose How His Life Should End.]]></description>
    <g:product_type><![CDATA[Amar Chitra Katha  > Brave Hearts Story > Singles]]></g:product_type>
    <g:google_product_category><![CDATA[]]></g:google_product_category>
    <g:image_link><![CDATA[http://www.amarchitrakatha.com/media/catalog/product/P/R/PRITHVIRAJ_CHAUHAN_0__4.jpg]]></g:image_link>
    <g:condition>new</g:condition>
    <g:availability>in stock</g:availability>
    <g:shipping_weight>0.09 kg</g:shipping_weight>
    <g:brand><![CDATA[]]></g:brand>
    <g:mpn><![CDATA[ACKPRITH1413]]></g:mpn>
    <g:gtin><![CDATA[]]></g:gtin>
  </item>
 </channel>
</rss>');
$tagValues=array("g:id","title","link");
$result=array();
foreach($object->getElementsByTagName("item") as $item)
{
    foreach($item->childNodes as $node)
    {
        if($node instanceof DOMElement)
        {
            if(in_array( $node->tagName,$tagValues))
            {
                $result[$node->tagName][]=$node->textContent;
            }
        }
    }
}
print_r($result);
(以上内容将拉取的所有实例)


未测试我的端。

您可以使用
PHP
DOMDocument
来完成它。正如我在下面的代码中所做的那样

getElementsByTagName(“项目”)作为$item)
{
foreach($item->childNodes作为$node)
{
if($DOMELENT的节点实例)
{
if(在数组中($node->tagName,$tagValues))
{
$result[$node->tagName][]=$node->textContent;
}
}
}
}
打印(结果);

您可以使用
PHP
DOMDocument
来完成它。正如我在下面的代码中所做的那样

getElementsByTagName(“项目”)作为$item)
{
foreach($item->childNodes作为$node)
{
if($DOMELENT的节点实例)
{
if(在数组中($node->tagName,$tagValues))
{
$result[$node->tagName][]=$node->textContent;
}
}
}
}
打印(结果);
试试这个,测试过了

array(1) {
    ["g"]=> string(29) "http://base.google.com/ns/1.0"
}
输出:

foreach ($xml->channel->item as $item) 
{ 
    // for php >= 5.2.0
    // $id = (string) $item->children('g', TRUE)->id; 
    // for php < 5.2.0
    // $id = (string) $item->children('http://base.google.com/ns/1.0')->id; 
    $id = (string) $item->children($namespaces["g"])->id; // for php < 5.2.0
    $title = (string) $item->title; 
    $link  = (string) $item->link; 
    var_dump($id, $title, $link); 
    echo "--\n"; 
} 
$xml = simplexml_load_file('http://example.com/rss.xml');
$namespaces = $xml->getNamespaces(true);
$itemArray = array();
foreach ($xml->channel->item as $item) 
{ 
    $obj = new stdClass();
    $obj->id = (string) $item->children($namespaces["g"])->id; // for php < 5.2.0
    $obj->title = (string) $item->title; 
    $obj->link  = (string) $item->link; 
    $itemArray[] = $obj;
} 
var_dump($itemArray);
$handle_object = $element->children('g', true);
然后:

最后,例如,为了将结果绑定到对象数组:

array(2) {
    [0]=> object(stdClass)#5 (3) {
        ["id"]=> string(12) "ACKKALID0577"
        ["title"]=> string(8) "Kalidasa"
        ["link"]=> string(58) "http://www.amarchitrakatha.com/in/kalidasa?fee=19&fep=1147"
    }
    [1]=> object(stdClass)#3 (3) {
        ["id"]=> string(12) "ACKPRITH1413"
        ["title"]=> string(18) "Prithviraj Chauhan"
        ["link"]=> string(68) "http://www.amarchitrakatha.com/in/prithviraj-chauhan?fee=19&fep=1150"
    }
}
参考:

参考:

参考:

试试这个,测试过了

array(1) {
    ["g"]=> string(29) "http://base.google.com/ns/1.0"
}
输出:

foreach ($xml->channel->item as $item) 
{ 
    // for php >= 5.2.0
    // $id = (string) $item->children('g', TRUE)->id; 
    // for php < 5.2.0
    // $id = (string) $item->children('http://base.google.com/ns/1.0')->id; 
    $id = (string) $item->children($namespaces["g"])->id; // for php < 5.2.0
    $title = (string) $item->title; 
    $link  = (string) $item->link; 
    var_dump($id, $title, $link); 
    echo "--\n"; 
} 
$xml = simplexml_load_file('http://example.com/rss.xml');
$namespaces = $xml->getNamespaces(true);
$itemArray = array();
foreach ($xml->channel->item as $item) 
{ 
    $obj = new stdClass();
    $obj->id = (string) $item->children($namespaces["g"])->id; // for php < 5.2.0
    $obj->title = (string) $item->title; 
    $obj->link  = (string) $item->link; 
    $itemArray[] = $obj;
} 
var_dump($itemArray);
$handle_object = $element->children('g', true);
然后:

最后,例如,为了将结果绑定到对象数组:

array(2) {
    [0]=> object(stdClass)#5 (3) {
        ["id"]=> string(12) "ACKKALID0577"
        ["title"]=> string(8) "Kalidasa"
        ["link"]=> string(58) "http://www.amarchitrakatha.com/in/kalidasa?fee=19&fep=1147"
    }
    [1]=> object(stdClass)#3 (3) {
        ["id"]=> string(12) "ACKPRITH1413"
        ["title"]=> string(18) "Prithviraj Chauhan"
        ["link"]=> string(68) "http://www.amarchitrakatha.com/in/prithviraj-chauhan?fee=19&fep=1150"
    }
}
参考:

参考:


Ref:

您可以使用以下命令获取g:属性内的循环值


可以使用以下命令获取g:属性内的循环值


您的php版本是什么?您已经包含了您的XML,但没有包含您试图用来导入它的代码。你能不能把你的代码和结果的更精确的描述包括进来?“无法获取项目数据”可能是许多事情中的任何一个。检查错误日志,包括任何可疑内容。当你这样做的时候,你可能想要包括一个更完整的描述,描述你想对你的结果做什么;最好的方向通常取决于你的目的地。:)我已经编辑了代码。你的php版本是什么?你已经包含了你的XML,但没有包含你试图用来导入它的代码。你能不能把你的代码和结果的更精确的描述包括进来?“无法获取项目数据”可能是许多事情中的任何一个。检查错误日志,包括任何可疑内容。当你这样做的时候,你可能想要包括一个更完整的描述,描述你想对你的结果做什么;最好的方向通常取决于你的目的地。:)我已经编辑了代码。它给出了结果,但我必须将数据存储在特定变量中。@C因为没问题,我正在更新我的帖子,在里面seconds@Cvince现在检查我的帖子,看看
试试这个代码片段
你可以在那里检查,然后你也可以使用
提取
。它给出了结果,但我必须将数据存储在特定的变量中。@c没问题,我正在更新我的帖子,在里面seconds@Cvince现在查看我的帖子,看看
试试这个代码片段
你可以在那里查看,然后你也可以使用
提取