【问题标题】:How to read advanced xml file in php?如何在 php 中读取高级 xml 文件?
【发布时间】:2018-03-30 12:57:27
【问题描述】:

如何从下面的 xml 文件中检索图像 url? 我能够以数组或对象格式检索urlloclastmodchangefreqpriority。 但是 image, loc, title 不是。 请告诉我存在哪种解决方案?

我能够检索下面的 xml 对象。

    SimpleXMLElement Object
(
    [url] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [loc] => https://test_url//search?tags=Auto%20Repairs
                    [lastmod] => 2017-08-15
                    [changefreq] => daily
                    [priority] => 0.5
                )
        )
)

我的 XML 文件代码如下所示。

<?xml version="1.0" encoding="utf-8"?>
    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
    <url>
    <loc>https://test_url/search?tags=Auto%20Repairs</loc>
    <lastmod>2017-08-15</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.5</priority>
    <image:image>
    <image:loc>https://media.test_url/1476130698_business_images.png</image:loc>
    <image:title>RV Services Near Me</image:title>
    </image:image>
    <image:image>
    <image:loc>https://media.test_url/1470780022.jpg</image:loc>
    <image:title>RV Services Near Me</image:title>
    </image:image>
    <image:image>
    <image:loc>https://media.test_url/1477691994.jpg</image:loc>
    <image:title>RV Services Near Me</image:title>
    </image:image>
    <image:image>
    <image:loc>https://media.test_url/1466467993.jpg</image:loc>
    <image:title>RV Services Near Me</image:title>
    </image:image>
    </url>
    </urlset>

【问题讨论】:

标签: php xml xml-parsing


【解决方案1】:

您处理特定命名空间中的元素,但由于它们都方便地位于单个命名空间下,您可以使用该命名空间(以及本例中的前缀)获取特定节点的所有子节点的能力。所以-&gt;children("image", true); 将提取图像命名空间中的所有节点,然后使用foreach() 一次遍历每个节点。

$xml = simplexml_load_file($fileName);
$images = $xml->url->children("image", true);
foreach ( $images as $image )   {
    echo $image->loc."=".$image->title.PHP_EOL;
}

这会产生...

https://media.test_url/1470780022.jpg=RV Services Near Me
https://media.test_url/1477691994.jpg=RV Services Near Me
https://media.test_url/1466467993.jpg=RV Services Near Me

【讨论】:

  • 其实。正在从文件 (sitemap.xml) 加载内容。我使用了$xml= simplexml_load_file("mrv_sitemap.xml"); 函数。
  • 如果我在一个字符串变量中使用了上面的代码,那么它可以工作但是为什么它不能与文件一起工作。
  • 我已将其更改为 simplexml_load_file(),但您应该能够将 $xml 更改为您已使用相同数据加载的数据。
  • 一件事是不要依赖 SimpleXMLElement 上的 print_r() 之类的输出 - 使用 -&gt;asXML() 向您展示完整的内容。
  • 是的。有用。但在一些迭代后给出警告解析错误。 Warning: simplexml_load_string(): Entity: line 11936: parser error : Start tag expected, '&lt;' not found in D:\xampp\htdocs\mrving_xml\index_image.php on line 56
【解决方案2】:

请检查以下变通代码。这肯定会帮助你继续前进。如果这对您有帮助,请告诉我。

<?php


$xmlstr = '<?xml version="1.0" encoding="utf-8"?>
    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
    <url>
    <loc>https://test_url/search?tags=Auto%20Repairs</loc>
    <lastmod>2017-08-15</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.5</priority>
    <image:image>
    <image:loc>https://media.test_url/1476130698_business_images.png</image:loc>
    <image:title>RV Services Near Me</image:title>
    </image:image>
    <image:image>
    <image:loc>https://media.test_url/1470780022.jpg</image:loc>
    <image:title>RV Services Near Me</image:title>
    </image:image>
    <image:image>
    <image:loc>https://media.test_url/1477691994.jpg</image:loc>
    <image:title>RV Services Near Me</image:title>
    </image:image>
    <image:image>
    <image:loc>https://media.test_url/1466467993.jpg</image:loc>
    <image:title>RV Services Near Me</image:title>
    </image:image>
    </url>
    </urlset>';
    /* here i am deleting colon */
    $CleanXML = str_replace(["image:image", "image:loc", "image:title", "xmlns:image", "xsi:schemaLocation", "xmlns:xsi"],["imageimage","imageloc","imagetitle", "xmlnsimage", "xsischemaLocation", "xmlnsxsi"], $xmlstr);
    $ParseData = @simplexml_load_string($CleanXML);
    echo "<pre>";
    print_r($ParseData);

【讨论】:

    猜你喜欢
    • 2021-06-07
    • 1970-01-01
    • 2011-05-14
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多