У меня есть следующий PHP, который работает точно так, как должен, и находит все «виджеты» в моем документе XML:
if($reader->nodeType == XMLREADER::ELEMENT && $reader->localName == 'manufacturer'){
$reader->read();
if($reader->value == 'Widget'){
echo 'congrats you have found the widget';
}
Но когда я пробую следующее, я не получаю результатов, и я знаю, что «синий виджет» несколько раз существует в документе xml в узле производителя:
if($reader->nodeType == XMLREADER::ELEMENT && $reader->localName == 'manufacturer'){
$reader->read();
if($reader->value == 'blue-widget'){
echo 'congrats you have found the widget';
}
Это как-то связано с дефисом в названии производителя? Я также не могу найти «синий виджет» по любому другому атрибуту, но любой другой названный продукт, который я пытаюсь извлечь, может быть найден просто найти. Как будто XML Reader не видит узлы продукта, которые содержат «синий виджет».
Вот XML:
<?xml version="1.0" encoding="utf-8"?>
<catalog>
//I can find this one
<product>
<programname>Example</programname>
<programurl>http://www.example.com</programurl>
<catalogname>Product Catalog</catalogname>
<lastupdated>date</lastupdated>
<name>first widget</name>
<keywords>some stuff</keywords>
<description>Typical description</description>
<sku>20</sku>
<manufacturer>Widget</manufacturer>
<manufacturerid>63</manufacturerid>
<upc>2250</upc>
<currency>USD</currency>
<price>6.79</price>
<buyurl>a url</buyurl>
<impressionurl>another url</impressionurl>
<imageurl>yet another url</imageurl>
<advertisercategory>widgets</advertisercategory>
<format>clean</format>
<instock>yes</instock>
<condition>new</condition>
<standardshippingcost>free</standardshippingcost>
</product>
<product>
//I can't find this one
<programname>Example</programname>
<programurl>http://www.example.com</programurl>
<catalogname>Product Catalog</catalogname>
<lastupdated>date</lastupdated>
<name>first widget</name>
<keywords>some stuff</keywords>
<description>Typical description</description>
<sku>20</sku>
<manufacturer>blue-widget</manufacturer>
<manufacturerid>63</manufacturerid>
<upc>2199</upc>
<currency>USD</currency>
<price>6.79</price>
<buyurl>a url</buyurl>
<impressionurl>another url</impressionurl>
<imageurl>yet another url</imageurl>
<advertisercategory>widgets</advertisercategory>
<format>clean</format>
<instock>yes</instock>
<condition>new</condition>
<standardshippingcost>free</standardshippingcost>
</product></catalog>
В моем XML-скрипте были ошибки синтаксического анализа. Когда я устранил ошибки, все работало нормально.
Причина, по которой я не смог найти «синий виджет», заключалась в том, что он возник в документе XML после ошибок.
В конечном итоге ответ на мой пост:
Сначала тщательно проверьте ошибки и изолируйте их! У вас может быть проблема с кодировкой, и вы можете обратиться к следующему потоку для возможного решения:
Сгенерированный PHP XML показывает недопустимое сообщение Char value 27
Других решений пока нет …