我有一个看起来像这样的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。,
这样做的建议提前致谢。
答案 0 :(得分:4)
这是我的抨击:
$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
的密钥。
来想一想:也许我误解了你的问题,你根本不想要独特的元素名称,但想要字面上所有元素。如果是这样的话:你想要他们怎么样?作为字符串?包括他们的完整路径?
答案 1 :(得分:-3)
以下是一个简单的示例,说明如何使用http://php.net/manual/en/simplexml.examples-basic.php
中的PHPSimpleXML
库
<?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;
}
}
?>