PHP DOM奇数输出?

时间:2011-01-27 08:47:34

标签: php domdocument

这是我的XML:

<?xml version="1.0" encoding="UTF-8"?>
<columns>
    <column>
        <originalName>ORP</originalName>
        <name>ORP</name>
        <visible>1</visible>
    </column>
    <column>
        <originalName>OKRES</originalName>
        <name>OKRES</name>
        <visible>1</visible>
    </column>
    <column>
        <originalName>Objekt</originalName>
        <name>Objekt</name>
        <visible>1</visible>
    </column>
    <column>
        <originalName>Školenie</originalName>
        <name>Skolenie</name>
        <visible>1</visible>
    </column>
    <column>
        <originalName>Dátum posledného školenia OPP</originalName>
        <name>DatumPoslednehoSkoleniaOPP</name>
        <visible>1</visible>
    </column>
    <column>
        <originalName>Dátum posledného školenia OPP</originalName>
        <name>DatumPoslednehoSkoleniaOPP1</name>
        <visible>0</visible>
    </column>
</columns>

我的代码迭代所有列:

$schema = new DOMDocument();
$schema->load(BASE_PATH.'/schema.xml');
foreach ($schema->getElementsByTagName('column') as $column) {
    foreach($column->childNodes as $child) {
        echo $child->nodeName, ' => ', $child->nodeValue, '<br />';
    }
}

现在输出最奇怪。我不明白为什么'#text =&gt;'不断出现在那里:

#text =>
originalName => ORP
#text =>
name => ORP
#text =>
visible => 1
#text =>
#text =>
originalName => OKRES
#text =>
name => OKRES
#text =>
visible => 1
#text =>
#text =>
originalName => Objekt
#text =>
name => Objekt
#text =>
visible => 1
#text =>
#text =>
originalName => Školenie
#text =>
name => Skolenie
#text =>
visible => 1
#text =>
#text =>
originalName => Dátum posledného školenia OPP
#text =>
name => DatumPoslednehoSkoleniaOPP
#text =>
visible => 1
#text =>
#text =>
originalName => Dátum posledného školenia OPP
#text =>
name => DatumPoslednehoSkoleniaOPP1
#text =>
visible => 0
#text =>

3 个答案:

答案 0 :(得分:2)

您是否尝试使用LIBXML_NOBLANKS选项load()

或者loadXML()也可以做你想做的事(我在这里猜测)。


根据PHP, DOM and XML : Part 2 – DOMDocument,您应该:

$schema->load(BASE_PATH.'/schema.xml', LIBXML_NOBLANKS);

或者

$schema = new DOMDocument();
$schema->preserveWhiteSpace = false; // This is the important part
$schema->load(BASE_PATH.'/schema.xml');

取决于您的PHP版本。

答案 1 :(得分:2)

您可以跳过DOMText元素:

$schema = new DOMDocument();
$schema->load(BASE_PATH.'/schema.xml');
foreach ($schema->getElementsByTagName('column') as $column) {
    foreach($column->childNodes as $child) {
        if ($child instanceof DOMElement) { // (! $child instanceof DOMText)
            echo $child->nodeName, ' => ', $child->nodeValue, '<br />';
        }
    }
}

或者使用DOMXPath:

$doc = new DOMDocument();
$doc->load(BASE_PATH.'/schema.xml');
$xpath = new DOMXPath($doc);

foreach($xpath->query('/columns/column/*') as $child)
{
    echo $child->nodeName, ' => ', $child->nodeValue, "\n";
}

答案 2 :(得分:1)

<?php
$schema = new DOMDocument();
$schema->load('schema.xml');
foreach ($schema->getElementsByTagName('column') as $column) {
    $array = false;$i=0;
    foreach ($column->childNodes as $childNode){
        $array[$i] = $childNode->firstChild->nodeValue;
        $i++;
    }
    echo $array[1]." = > ".$array[3]." = > ".$array[5]."<br>";
}
?>
尝试这个...它不是通过贬低标准和bla bla bla或类似的东西,但它的工作原理! :P

P.S。 here 如果你想阅读,你有一些解释/教程......