这是我的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 =>
答案 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 如果你想阅读,你有一些解释/教程......