从 XML 中获取数据,包括。子项并使用 php 在页面中显示
Fetching data from XML incl. children and display in page using php
我有一个 XML 结构如下:
<item>
<attributes>
<attribute datatype="text">
<name><![CDATA[name]]></name>
<value><![CDATA[Product Name]]></value>
</attribute>
<attribute datatype="text">
<name><![CDATA[sku]]></name>
<value><![CDATA[PRODUCTSKU]]></value>
</attribute>
<attribute datatype="numeric">
<name><![CDATA[price]]></name>
<value>10000</value>
</attribute>
<attribute datatype="numeric">
<name><![CDATA[eancode]]></name>
<value>123456789</value>
</attribute>
</attributes>
</item>
现在,我在这里寻找以下输出:
Product Name : PRODUCTSKU : 10000 : 123456789
但是使用以下代码获取 attribute 节点下的全部详细信息,但我无法分离 SUB NODES 值...
$reader = new XMLReader();
$reader->open( 'test.xml' );
$id = 'attributes';
while ($reader->read()) {
if ($reader->nodeType == XMLReader::ELEMENT) {
$exp = $reader->expand();
if ($exp->nodeName == $id)
echo "<b>" . $exp->nodeName . " : </b>" . $exp->nodeValue . "<br />";
}
}
我也用 DOMDOcument 试过这个:
$xml = new DOMDocument();
$xml->load('test.xml');
$root = $xml->documentElement;
foreach($root->childNodes as $node){
//print $node->nodeName.' - '.$node->nodeValue;
print $node->nodeValue;
}
但这也会将所有子节点一起显示...我想将它们分开并存储到数据库中...请帮我解决这个问题...我很长时间都在努力解决这个问题
使用 SimpleXML
更容易,但如果您想使用 XMLReader
试试这个:
$values = array();
$reader = new XMLReader();
$reader->open( 'test.xml' );
$id = 'attribute';
while ($reader->read()) {
if ($reader->nodeType == XMLReader::ELEMENT) {
$exp = $reader->expand();
if ($exp->nodeName == "item") {
if (count($values)) print implode(" : ", $values);
$values = array();
}
if ($exp->nodeName == $id) {
foreach ($exp->childNodes as $node) {
if ($node->nodeName == "value") {
$values[] = $node->textContent;
}
}
}
}
}
if (count($values)) print implode(" : ", $values);
我有一个 XML 结构如下:
<item>
<attributes>
<attribute datatype="text">
<name><![CDATA[name]]></name>
<value><![CDATA[Product Name]]></value>
</attribute>
<attribute datatype="text">
<name><![CDATA[sku]]></name>
<value><![CDATA[PRODUCTSKU]]></value>
</attribute>
<attribute datatype="numeric">
<name><![CDATA[price]]></name>
<value>10000</value>
</attribute>
<attribute datatype="numeric">
<name><![CDATA[eancode]]></name>
<value>123456789</value>
</attribute>
</attributes>
</item>
现在,我在这里寻找以下输出:
Product Name : PRODUCTSKU : 10000 : 123456789
但是使用以下代码获取 attribute 节点下的全部详细信息,但我无法分离 SUB NODES 值...
$reader = new XMLReader();
$reader->open( 'test.xml' );
$id = 'attributes';
while ($reader->read()) {
if ($reader->nodeType == XMLReader::ELEMENT) {
$exp = $reader->expand();
if ($exp->nodeName == $id)
echo "<b>" . $exp->nodeName . " : </b>" . $exp->nodeValue . "<br />";
}
}
我也用 DOMDOcument 试过这个:
$xml = new DOMDocument();
$xml->load('test.xml');
$root = $xml->documentElement;
foreach($root->childNodes as $node){
//print $node->nodeName.' - '.$node->nodeValue;
print $node->nodeValue;
}
但这也会将所有子节点一起显示...我想将它们分开并存储到数据库中...请帮我解决这个问题...我很长时间都在努力解决这个问题
使用 SimpleXML
更容易,但如果您想使用 XMLReader
试试这个:
$values = array();
$reader = new XMLReader();
$reader->open( 'test.xml' );
$id = 'attribute';
while ($reader->read()) {
if ($reader->nodeType == XMLReader::ELEMENT) {
$exp = $reader->expand();
if ($exp->nodeName == "item") {
if (count($values)) print implode(" : ", $values);
$values = array();
}
if ($exp->nodeName == $id) {
foreach ($exp->childNodes as $node) {
if ($node->nodeName == "value") {
$values[] = $node->textContent;
}
}
}
}
}
if (count($values)) print implode(" : ", $values);