1C xml & xpath_eval

IgoX

Новичок
1C xml & xpath_eval

Есть код
PHP:
$xml = join('',file('2.xml'));
$xml = xmldoc($xml);
$xml->xpath_init();
$ctx = xpath_new_context($xml);
$nodes = xpath_eval($ctx,iconv("Windows-1251", "utf-8", "//Товар"));
var_dump($nodes);
foreach($nodes->nodeset as $node) 
{
   print "xxxxxx";
   ...........
вот что выдает var_dump
object(XPathObject)(4) { [0]=> int(3) [1]=> int(109262976) ["type"]=> int(1) ["nodeset"]=> array(0) { } }
естественно в цикл не входит. Почему не находит, что не так?
Спасибо.
 

IgoX

Новичок
я в обращался к livsoft он разбирался с этой проблемой у него тоже ни чего не находило. Поступил как он посоветовал удалил ненужные теги <BizTalk и т.д. после чего все заработало. Странно но как эти теги мешают непонятно.
 

Sababa

Guest
скорее всего проблема с имена пространств (namespaces).


приведи кусок xml-а, по которому ищешь, подскажу как правильно составить xpath
 

IgoX

Новичок
<?xml version="1.0" encoding="UTF-8"?>
<BizTalk xmlns="urn:schemas-biztalk-org:biztalk/biztalk-0.81.xml"><Route><From locationID="" locationType="" process="" path="" handle=""/><To locationID="" locationType="" process="" path="" handle=""/></Route><Body><Р_Р_Р_Р_РчС_С&#9578;РчС_РєР°С_Р_Р_С"Р_С_Р_Р°С&#9532;РёС_ xmlns="urn:CommerceML"><Р_Р_Р_С'С_Р°Р_РчР_С' Р_Р_РчР_С'РёС"РёРєР°С'Р_С_="1F3D761D
 

IgoX

Новичок
с кодировкой нахимичил выше извините
<?xml version="1.0" encoding="windows-1251"?>
<BizTalk xmlns="urn:schemas-biztalk-org:biztalk/biztalk-0.81.xml"><Route><From locationID="" locationType="" process="" path="" handle=""/><To locationID="" locationType="" process="" path="" handle=""/></Route><Body><КоммерческаяИнформация xmlns="urn:CommerceML"><Каталог Идентификатор="8C40C3AE-9947-40A5-9BF0-8C27130F8B4D" Наименование="Собственный каталог
 

Sababa

Guest
именно, проблема c пространствами имен.

не в юникоде можешь запостить кусок и указать что именно нужно найти?
 

IgoX

Новичок
Найти нодо //Товар
<?xml version="1.0" encoding="windows-1251"?>
<BizTalk xmlns="urn:schemas-biztalk-org:biztalk/biztalk-0.81.xml"><Route><From locationID="" locationType="" process="" path="" handle=""/><To locationID="" locationType="" process="" path="" handle=""/></Route><Body><КоммерческаяИнформация xmlns="urn:CommerceML"><Контрагент Идентификатор="1F3D761D-1068-4A64-BB4A-CB69FE0C0F18" Наименование="Торговый дом &quot;Комплексный&quot;" ОтображаемоеНаименование="ЗАО &quot;Торговый дом Комплексный&quot;" Адрес="г.Москва Подбельского 17-А,45" ЮридическийАдрес="г.Москва Подбельского 17-А,45"><Контакт Идентификатор="Фирма_12346" Наименование="Контакт фирмы 'Торговый дом &quot;Комплексный&quot; (Магазин)'"><Телефон>223-33-1155, 556-66-7567</Телефон><Почта/></Контакт></Контрагент><Каталог Идентификатор="8C40C3AE-9947-40A5-9BF0-8C27130F8B4D" Наименование="Собственный каталог" Владелец="1F3D761D-1068-4A64-BB4A-CB69FE0C0F18" Единица="шт"><Свойство Идентификатор="Комментарий" Наименование="Дополнительная информация"/><Свойство Идентификатор="ПолноеНаименование" Наименование="Полное наименование"/><Товар Идентификатор="ID00001930" ИдентификаторВКаталоге="00001930"
 

Sababa

Guest
$ctx = xpath_new_context($xml);

xpath_register_ns($ctx, 'bizzz', 'urn:schemas-biztalk-org:biztalk/biztalk-0.81.xml');
xpath_register_ns($ctx, 'com', 'urn:CommerceML');

$nodes = xpath_eval($ctx,iconv("Windows-1251", "utf-8", "/bizzz:BizTalk/bizzz:Body/com:КоммерческаяИнформация/com:Товар"));

ну либо так:
$nodes = xpath_eval($ctx,iconv("Windows-1251", "utf-8", "//com:Товар"));


не проверял, но идея думаю ясна
 

Alexandre

PHPПенсионер
извините, может я не по теме, но я только что ответил в топик по 1С: http://www.phpclub.net/talk/showthread.php?s=&threadid=36907&rand=9

может что там полезного найдете....
по крайней мере проще написать скрипт на 1С, который формирует "человеческий XML" и организовать его отправку и обработку на сервере, чем мучиться с разбором сумашедшего XML
 

Alexandre

PHPПенсионер
по крайней мере система выставления счетов, и экспорт прайса я сделал еще полтора года назад....
 
Сверху