我有一個簡單的 xml 檔案,包含一個或多個節點,例如:
<?xml version='1.0' standalone='yes'?>
<nodes>
<node>
<value>Val1</value>
</node>
</nodes>
simplexml_load_string()對于具有一個節點的檔案(如上),是否可以使用函式獲得:
SimpleXMLElement Object
(
[node] => Array
(
[0] => SimpleXMLElement Object
(
[value] => Val1
)
)
)
使用 [0] 鍵,例如具有更多節點的 xml 檔案,而不是:
SimpleXMLElement Object
(
[node] => SimpleXMLElement Object
(
[value] => Val1
)
)
因為接下來我需要將其轉換為具有相同深度的陣列,無論是來自具有一個或多個節點的檔案
uj5u.com熱心網友回復:
SimpleXML 已經做了你想要的 - 兩者之間的區別僅在于來自 的輸出print_r,它顯示了訪問元素的最簡潔的方式,而不是唯一的方式。
具體來說,$xml->node->valueand$xml->node[0]->value[0]總是可以用來參考同一個節點,foreach ( $xml->node as $node )即使只有一個匹配的節點也總是有效。
這就是為什么“盲目地”將 XML 結構轉換為 PHP 陣列通常是一個壞主意 - 相反,使用foreach回圈和屬性訪問來提取您需要的任何資訊。
您可以使用以下代碼自己嘗試:
// Single node
$xml1 = <<<XML
<?xml version='1.0' standalone='yes'?>
<nodes>
<node>
<value>Val1</value>
</node>
</nodes>
XML;
$sx1 = simplexml_load_string($xml1);
print_r($sx1); // misleading!
echo $sx1->node->value, PHP_EOL;
echo $sx1->node->value[0], PHP_EOL;
echo $sx1->node[0]->value[0], PHP_EOL;
echo $sx1->node[0]->value, PHP_EOL;
foreach ( $sx1->node as $node ) {
echo $node->value, PHP_EOL;
}
// Two nodes with same name
$xml2 = <<<XML
<?xml version='1.0' standalone='yes'?>
<nodes>
<node>
<value>Val1</value>
</node>
<node>
<value>Val2</value>
</node>
</nodes>
XML;
$sx2 = simplexml_load_string($xml2);
print_r($sx2); // misleading!
echo $sx2->node->value, PHP_EOL;
echo $sx2->node[0]->value, PHP_EOL;
echo $sx2->node[0]->value[0], PHP_EOL;
echo $sx2->node->value[0], PHP_EOL;
foreach ( $sx2->node as $node ) {
echo $node->value, PHP_EOL;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/378873.html
