1
我正在尋找解決方案,從大型XML文件中提取一些節點(使用xmlstarlethttp://xmlstar.sourceforge.net/),然後解析此節點到php陣列。從xml文件獲取節點內容並將其轉換爲php數組?
elements.xml
<?xml version="1.0"?>
<elements>
<element id="1" par1="val1_1" par2="val1_2" par3="val1_3">
<title>element 1 title</title>
<description>element 1 description</description>
</element>
<element id="2" par1="val2_1" par2="val2_2" par3="val2_3">
<title>element 2 title</title>
<description>element 2 description</description>
</element>
</elements>
要提取=使用xmlstarlet我執行該shell命令 「1」 id爲元素標籤...
xmlstarlet sel -t -c "/elements/element[id=1]" elements.xml
這個shell命令的輸出這樣的事情...
<element id="1" par1="val1_1" par2="val1_2" par3="val1_3">
<title>element 1 title</title>
<description>element 1 description</description>
</element>
我怎麼能分析這個shell輸出到PHP數組?
謝謝。
我發現http://php.net/manual/en/function.simplexml-load-string.php很有用。這個SimpleXML函數會將提取的XML片段轉換爲SimpleXML對象。
只是好奇,爲什麼使用xmlstar過類似的SimpleXML或XML DOM? – Jamie 2010-04-18 11:52:25
我的XML文件非常大(〜100Mb)。我不確定Simplexml或XmlDom不會將整個xml文件加載到RAM中(這可能會導致php內存過度使用);但我不確定是否這樣說,因爲我對解析XML文件的Simplexml機制一無所知。 – Kirzilla 2010-04-18 12:00:33
SimpleXML和DOM幾乎完全相同,因爲它們使用相同的libxml實現。在dom和simplexml之間切換的函數不僅僅是移交它們的內部xmlNodePtr。所以是的,該文件將在內存中。但是還有其他解析器擴展,例如XMLReader的。 – VolkerK 2010-04-18 12:45:53