我有XML包含产品。我需要从这个XML中获取:描述,价格,重量等。 当我使用SimpleXML打开XML并打印时,标签之间没有文本。 这是我的XML
<product id="30" currency="PLN" code_producer="M-1100/21">
<producer id="1282294004" name="MAT lingerie" />
<category id="1214553882" xml:lang="pol" name="BIUSTONOSZE/Półusztywniane" />
<unit id="0" xml:lang="pol" name="szt." />
<series id="4" xml:lang="pol" name="Basic Collection" />
<card url="http://b2b.tiffanie.pl/product-pol-30-Sofia-biustonosz-polusztywniany-M-1100-21.html" />
<description>
<name xml:lang="eng">Sofia biustonosz półusztywniany M-1100/21</name>
<name xml:lang="pol">Sofia biustonosz półusztywniany M-1100/21</name>
<version name="czarny">
<name xml:lang="eng">Sofia biustonosz półusztywniany M-1100/21</name>
<name xml:lang="pol">czarny</name>
</version>
<long_desc xml:lang="eng">
<span style="font-family: Tahoma, Geneva, sans-serif; color: #3f3229;">Delikatny biustonosz dla kobiet które cenią sobie komfort i wygodę. Biustonosz typu soft o perfekcyjnej konstrukcji pozwala zebrać biust jednocześnie doskonale, utrzymać go na miejscu. Miseczki zdobione są subtelnym kwiatowym haftem. Model posiada regulowane, odpinane ramiączka.</span>
</long_desc>
<long_desc xml:lang="pol">
<span style="font-family: Tahoma, Geneva, sans-serif; color: #3f3229;">Delikatny biustonosz dla kobiet które cenią sobie komfort i wygodę. Biustonosz typu soft o perfekcyjnej konstrukcji pozwala zebrać biust jednocześnie doskonale, utrzymać go na miejscu. Miseczki zdobione są subtelnym kwiatowym haftem. Model posiada regulowane, odpinane ramiączka.</span>
</long_desc>
</description>
print_r中的结果
[description] => SimpleXMLElement Object
(
[name] => Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[lang] => eng
)
)
[1] => SimpleXMLElement Object
(
[@attributes] => Array
(
[lang] => pol
)
)
)
[long_desc] => Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[lang] => eng
)
)
[1] => SimpleXMLElement Object
(
[@attributes] => Array
(
[lang] => pol
)
)
)
)
如何使用SimpleXML在标签之间读取文本并保存到对象?
答案 0 :(得分:1)
XML末尾缺少标记“</product>
”。也许在c&amp; p
任何使用XMLReader的测试代码都是完美的,对我来说是读取XML最简单的方法。
<?php
$input = file_get_contents('http://set4812.pl/web/1.xml');
$input = str_replace(['<![CDATA[', ']]>'], '', $input);
$reader = new XMLReader();
$reader->xml($input);
$r = xmlToArray($reader);
print_r($r);
function xmlToArray(XMLReader $xml){
$array = [];
$i = 0;
while($xml->read()){
if ($xml->nodeType == XMLReader::END_ELEMENT) {
break;
}
if ($xml->nodeType == XMLReader::ELEMENT && !$xml->isEmptyElement) {
unset($array[$i]);
$array[$i]['name'] = $xml->name;
$array[$i]['values'] = xmlToArray($xml);
$array[$i]['attributes'] = getAttributesFromNode($xml);
$i++;
} else if ($xml->isEmptyElement) {
$array[$i]['name'] = $xml->name;
$array[$i]['values'] = null;
$array[$i]['attributes'] = getAttributesFromNode($xml);
$i++;
} else if($xml->nodeType == XMLReader::TEXT) {
$array[$i]['values'] = $xml->value;
}
}
return $array;
}
function getAttributesFromNode(XMLReader $xml)
{
if(!$xml->hasAttributes) {
return null;
}
$attributes = [];
while($xml->moveToNextAttribute()) {
$attributes[$xml->name] = $xml->value;
}
return $attributes;
}