【问题标题】:Get XML values using PHP使用 PHP 获取 XML 值
【发布时间】:2012-03-01 09:43:44
【问题描述】:

我有一个 XML 文件。这是它的一个小版本。

<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
<title>Liste des ebooks</title>
<updated>2012-03-01T01:23:24Z</updated>
<author>
<name>Drown Del</name>
</author>
<opensearch:totalResults>2338</opensearch:totalResults>
<opensearch:itemsPerPage>100</opensearch:itemsPerPage>
<entry>
<category term="Romans" label="Romans"/>
<category term="Aventures" label="Aventures"/>
</entry>
</feed>

首先我想知道我们如何在 XML 术语中调用像 opensearch:totalResults 这样的东西。

我需要你的帮助来使用 PHP 获取以下值。

&lt;opensearch:totalResults&gt;2338&lt;/opensearch:totalResults&gt; 我需要将 2338 设置为 PHP 变量。

谢谢。


谢谢大家的回答。

我可以通过以下方式修复它。

$xml = simplexml_load_string($xmltext);
$val = $xml->xpath('opensearch:totalResults');
echo $val[0];

【问题讨论】:

  • 我真的不敢相信您无法通过搜索功能找到答案。几乎每个 DOM 示例都展示了如何使用 getElementsByTagName
  • 我尝试使用 simplexml_load_string() 而不是 DOMDocument()。无论如何,我可以解决我的问题。感谢您的评论。
  • Extract colon from XML的可能重复

标签: php xml


【解决方案1】:

使用 DOM 将所有这些信息解析到 PHP 中。例如。

$doc = new DOMDocument;
$doc->loadXML($xml);  //$xml is your xml string
echo $doc->getElementsByTagName("totalResults")->item(0)->nodeValue;

【讨论】:

  • 感谢您的回答。我可以用 XPath 修复它,我也在这里发布了我的答案。
【解决方案2】:

对于您的第一个问题,opensearch:totalResults 是开始标记的限定名称。它被称为限定名称(您可能将其视为 QName),因为它包含标记的 命名空间 (opensearch)。

对于第二个问题,您可以轻松地将parse your XML 转换为DOMDocument,然后在其中查询相关标签的值。 SO上有很多例子,当然还有谷歌; PHP.net 中的一个基本名称是here

重要提示:您当前的 XML 文档不包含 opensearch 命名空间的 XML namespace declaration,因此不会解析。您需要通过修改添加这样的声明:

<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr"
      xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/">

如果您需要更强大的查询,也可以使用XPath。一个最小的示例如下所示:

$doc = new DOMDocument();
$doc->loadXML($xml);

$xpath = new DOMXPath($doc);

$nodes = $xpath->query('//opensearch:totalResults');
foreach ($nodes as $node) {
    echo $node->nodeValue;
}

【讨论】:

  • 感谢您的回答。我可以用 XPath 修复它,我也在这里发布了我的答案。
【解决方案3】:

opensearch 是一个命名空间,因此您可以尝试访问它:

$yourXml->children('openSearch', true)->totalResults

希望对你有帮助

【讨论】:

  • 感谢您的回答。我可以用 XPath 修复它,我也在这里发布了我的答案。
  • 很高兴知道你是自己搞定的
【解决方案4】:

查看 PHP 中的确切结果

<?php
$xml ='<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
<title>Liste des ebooks</title>
<updated>2012-03-01T01:23:24Z</updated>
<author>
<name>Drown Del</name>
</author>
<opensearch:totalResults>2338</opensearch:totalResults>
<opensearch:itemsPerPage>100</opensearch:itemsPerPage>
<entry>
<category term="Romans" label="Romans"/>
<category term="Aventures" label="Aventures"/>
</entry>
</feed>';

$dom = new DOMDocument();
$dom->loadXML($xml);
$xmlD = simplexml_import_dom($dom);
echo $xmlD->totalResults;
?>

【讨论】:

  • 感谢您的回答。我可以用 XPath 修复它,我也在这里发布了我的答案。
【解决方案5】:

simplexml_load_file为对象读取你的xml文件

然后像这样获取你的变量:

$object->{'opensearch:totalResults'};

【讨论】:

    猜你喜欢
    • 2021-04-30
    • 2022-01-13
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 2012-02-28
    • 2012-07-05
    相关资源
    最近更新 更多