【问题标题】:Get specific results from XML file从 XML 文件中获取特定结果
【发布时间】:2014-08-31 11:34:21
【问题描述】:

您好,我正在尝试从 XML 文件中提取一些数据。但它不适用于我的解决方案。

XML 文件:

<?xml version='1.0' encoding='UTF-8'?>
<m4n xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="datafeeds/ext/m4n-datafeeds.xsd">
<dataHeader>
<exportType>stream</exportType>
<exportId>2000433</exportId>
<rows>40434</rows>
<lastChecked>2014-07-02 10:12:24.41</lastChecked>
<lastUpdated>2014-07-02 10:13:36.09</lastUpdated>
<parserLocale>nl_NL</parserLocale>
<streamCurrency>EUR</streamCurrency>
<name>VALUE</name>
<description><![CDATA[]]></description>
</dataHeader>

<data>
<record>
    <recordHash><![CDATA[-2147395708]]></recordHash>
    <column name="url"><![CDATA[VALUE]]></column>
    <column name="title"><![CDATA[VALUE]]></column>
    <column name="description"><![CDATA[VALUE]]></column>
    <column name="offerid"><![CDATA[VALUE]]></column>
    <column name="image"><![CDATA[VALUE]]></column>
    <column name="price"><![CDATA[VALUE]]></column>
    <column name="category"><![CDATA[VALUE]]></column>
    <column name="subcategory"><![CDATA[VALUE]]></column>
    <column name="stock" />
    <column name="timetoship"><![CDATA[VALUE]]></column>
    <column name="ean"><![CDATA[VALUE]]></column>
    <column name="price_shipping"><![CDATA[VALUE]]></column>
    <column name="price_old" />
    <column name="vendor"><![CDATA[VALUE]]></column>
    <column name="category_path" />
    <column name="description2"><![CDATA[VALUE]]></column>
    <column name="largeimage"><![CDATA[VALUE]]></column>
    <column name="author"><![CDATA[VALUE]]></column>
    <column name="column0"><![CDATA[VALUE]]></column>
    <column name="column1"><![CDATA[VALUE]]></column>
    <column name="column2"><![CDATA[VALUE]]></column>
    <column name="column3"><![CDATA[VALUE]]></column>
    <column name="column4"><![CDATA[VALUE]]></column>
    <column name="column5"><![CDATA[VALUE]]></column>
    <column name="column6"><![CDATA[VALUE]]></column>
    <column name="column7"><![CDATA[VALUE]]></column>
    <column name="column8"><![CDATA[VALUE]]></column>
    <column name="column9"><![CDATA[VALUE]]></column>
    <column name="sku"><![CDATA[VALUE]]></column>
    <column name="size"><![CDATA[VALUE]]></column>
    <column name="height"><![CDATA[VALUE]]></column>
</record>
</data></m4n>

我要提取的内容如下: 网址 = 值 标题 = 值 等等,所以基本上我想要列的名称和列的值一起。

我尝试了以下方法:

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, 'url');
$data = curl_exec($ch);
curl_close($ch);

$xml = new SimpleXMLElement($data);

foreach($xml->data as $data)
{
    foreach($data->record as $record)
    {
        foreach($record->column as $column)
        {
            foreach($column->attributes() as $key => $value)
            {
                echo $key." - ".$value."<br/>";
            }
        }
    }
}

有人可以看看

【问题讨论】:

  • 你的脚本有什么问题?我看到的唯一错误是您没有关闭&lt;data&gt;&lt;m4n&gt; 标记... XML 必须有效才能使SimpleXMLElement 工作。
  • @MihaiIorga 问题是我没有得到我想要的结果。我只知道这个词:'name'
  • @MihaiIorga 是的,这很好,但正如您所见,您会得到结果:名称 - url 等等。但我想要达到的是单词 url 与在这种情况下名称等于 url 的列中的内容的值。但我想要所有的记录而不仅仅是 url。
  • 后来看到是在回显属性名和值。
  • @MihaiIorga 没问题,它现在可以工作了 :)

标签: php xml loops foreach


【解决方案1】:

好的,你需要像这样提取CDATA的值:

foreach($xml->data as $data)
{
    foreach($data->record as $record)
    {
        foreach($record->column as $column)
        {
          echo $column->attributes()->{0}." - ".(string)$column."<br/>"; // fetch first attribute and the CDATA value

        }
    }
}

$column 转换为字符串。

CodePAD

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 2013-02-21
    • 2016-03-05
    • 1970-01-01
    相关资源
    最近更新 更多