다음과 같은 구조의 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
그러나 다음 코드를 사용하면 속성 노드 에서 전체 세부 정보를 가져 오지만 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;
}
하지만 이것은 또한 모든 하위 노드를 함께 표시합니다 ... 나는 그들을 분리하여 DB에 저장하고 싶습니다 ... 이것을 도와주세요 ...이 조용히 오래 고생하고 있습니다
사용하기가 더 쉽지만 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);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다