如何使用php计算xml文件的节点?

时间:2017-07-13 16:07:41

标签: php xml

我知道可能是重复但不起作用....

我有这个xml

<?xml version="1.0" encoding="UTF-8"?><kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">
    <Document>
        <name>EMSC - Last 2 Weeks earthquakes worldwide</name>
        <Folder>
            <name>2017 7 - 13</name>
        </Folder>
        <Folder>
            <name>2017 7 - 12</name>
        </Folder>
    </Document>
</kml>

我想要计数节点Folder,我把它绑起来

$pars_emsc= simplexml_load_file('/file');

$count_folder_emsc= $pars_emsc-> Document -> getElementsByTagName('Folder')->length;

但不起作用......

2 个答案:

答案 0 :(得分:2)

您不能将简单的XML解析器用作DOM文档。很简单getElementsByTagNameSimpleXML中不存在。请改用:

$pars_emsc = new DOMDocument( "1.0", "ISO-8859-15" );
$pars_emsc->load("/file");
$count_folder_emsc= $pars_emsc->getElementsByTagName("Document")[0]->getElementsByTagName('Folder')->length;

print_r($count_folder_emsc);

或者只做:

$pars_emsc= simplexml_load_file("/file");
$count_folder_emsc= $pars_emsc-> Document -> Folder -> count();

答案 1 :(得分:0)

Xpath表达式也可以计算节点。

$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);
$xpath->registerNamespace('kml', 'http://www.opengis.net/kml/2.2');

var_dump($xpath->evaluate('count(//kml:Folder)'));

输出:

float(2)

您使用默认命名空间,因此必须为其注册前缀。