如何使用 php 获取 XML 中所有现有标签的列表

Posted

技术标签:

【中文标题】如何使用 php 获取 XML 中所有现有标签的列表【英文标题】:How to get the list of all existing tags in a XML using php 【发布时间】:2011-10-03 15:03:13 【问题描述】:

我有一个看起来像这样的 xml 数据

<channel>
<title>-----</title>
<link>------</link>
<description>---</description>
<lastBuildDate>Tue, 27 Sep 2011 16:37:01 +0000</lastBuildDate>
<language>en</language>
<generator>-------</generator>
<item>
    <title>-----</title>
    <link>-------</link>
    <comments>------</comments>
    <pubDate>Tue, 27 Sep 2011 16:37:01 +0000</pubDate>
    <category>-----</category>
</item>
    <item>
    <title>-----</title>
    <link>-------</link>
    <comments>------</comments>
    <pubDate>Tue, 27 Sep 2011 </pubDate>
    <category>-----</category>
</item>
    <item>
    <title>-----</title>
    <link>-------</link>
    <comments>------</comments>
    <pubDate>Wed, 28 Sep 2011 16:37:01 +0000</pubDate>
    <category>-----</category>
</item>
</channel>

从这里我需要检索所有现有的 XML 标签给用户,比如频道、标题、链接、项目等,包括他们的子标签。我的意思是 XML 文件中的所有现有标签 我需要帮助如何使用 php 来做到这一点,我使用了 DOM 和简单的 XML 对象,但如果我知道我需要的标签名称,我只能获取特定标签中的值。,

但我实际上需要处理许多我不知道该特定 xml 的结构和标签是什么的 xml 文件,为此我需要获取现有标签名称,以便我可以将它们显示给用户选择他需要的标签...

我需要使用 php 执行此操作的建议。

提前致谢。

【问题讨论】:

【参考方案1】:

这是我的尝试:

$doc = new DOMDocument();

$doc->loadXML( $yourXmlString ); // or:
$doc->load( $yourXmlUrl );

$xpath = new DOMXpath( $doc );
$nodes = $xpath->query( '//*' );

$nodeNames = array();
foreach( $nodes as $node )

    $nodeNames[ $node->nodeName ] = $node->nodeName;


var_dump( $nodeNames );

我希望我可以让xpath 表达式更有效一点,但我想不出任何东西。这就是为什么我不断地覆盖$nodeNames 的密钥。

想一想:也许我误解了你的问题,你根本不想要唯一的元素名称,而是想要所有元素。如果是这样:你想要他们怎么样?作为字符串?包括他们的完整路径?

【讨论】:

我需要所有标签进入一个数组..!!而且我不需要唯一元素,我只需要将所有元素存储在数组中..!【参考方案2】:

这是一个简单的例子,说明如何使用 PHP 的 SimpleXML 库,位于 http://php.net/manual/en/simplexml.examples-basic.php

<?php
include 'example.php';

$movies = new SimpleXMLElement($xmlstr);

/* Access the <rating> nodes of the first movie.
 * Output the rating scale, too. */
foreach ($movies->movie[0]->rating as $rating) 
    switch((string) $rating['type'])  // Get attributes as element indices
    case 'thumbs':
        echo $rating, ' thumbs up';
        break;
    case 'stars':
        echo $rating, ' stars';
        break;
    

?>

【讨论】:

以上是关于如何使用 php 获取 XML 中所有现有标签的列表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用PHP从元素中获取包含内容的所有标签[重复]

如何使用Python在现有XML中附加一堆标签

如何使用 PHP 解析带有冒号标签的 XML 节点

如何让 PHP 回显 XML 标签?

如何重新标记连接到现有数据框的一些新计算的列?

如何使用 PHP 从 XML“链接”标签中提取“href”属性?