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

eivnm1vs  于 2023-03-07  发布在  PHP
关注(0)|答案(3)|浏览(130)

我有一个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做这个的建议。
先谢了。

nmpmafwu

nmpmafwu1#

下面是我的尝试:

$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的键。
仔细想想:也许我误解了你的问题,你根本不想要唯一的元素名,而是想要字面上的所有元素。如果是这样:你想要它们怎么样?作为字符串?包括它们的完整路径?

6uxekuva

6uxekuva2#

$xml = simplexml_load_string($response); ///$response is xml data
$json = json_encode($xml);
$array = json_decode($json,TRUE);
print_r($array);
a5g8bdjr

a5g8bdjr3#

下面是一个简单的示例,说明如何使用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;
    }
}
?>

相关问题