|
php xpath: некорректно работает метод SimpleXMLElement->xpath()
|
|||
---|---|---|---|
#18+
В Linux тот же самый код отрабатывает корректно. Но в Windows наблюдается следующий артефакт (вероятно связанный с различием в символах перехода на новую строку). Тест 1 Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
Получаем (узел найден, но его значение "потерялось"): Код: php 1. 2. 3. 4. 5. 6.
Если же раскомментировать строку, удаляющую табуляции и символы перехода на новую строку, получим корректный результат (если табуляции не удалить, то значение не появится - необходимо удалить и табуляции, и символы перевода строки): Код: php 1. 2. 3. 4. 5. 6. 7.
Тест 2 Код: php 1. 2. 3. 4. 5.
Получаем (узел найден, но его значение "потерялось"): Код: php 1. 2. 3. 4. 5. 6.
Если же раскомментировать строку, удаляющую символы перехода на новую строку, получим корректный результат: Код: php 1. 2. 3. 4. 5. 6. 7.
Независимо от запроса (из Linux или из Windows), по ссылке http://www.cbr.ru/scripts/XML_daily.asp?date_req=29/11/2016 получаем xml-код в кодировке "windows-1251" ( <?xml version="1.0" encoding="windows-1251" ?> ). В чём точная причина "исчезновения" значения в возвращаемом объекте SimpleXMLElement ? [ simplexml_load_file ] и [ new SimpleXMLElement ] в обоих случаях выполняются безо всяких ошибок и предупреждений. Но при этом метод xpath узел находит, но в возвращаемый объект SimpleXMLElement значение найденного узла не включает. Почему ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2016, 18:35 |
|
php xpath: некорректно работает метод SimpleXMLElement->xpath()
|
|||
---|---|---|---|
#18+
А Nominal вообще не находит - даже если и удалять символы перехода на новую строку: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
Получаем: Код: php 1. 2. 3. 4. 5. 6.
Т.е. в Windows xpath ни хрена не работает. Работает только для последнего подузла и только если удалять символы перехода на новую строку. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2016, 19:02 |
|
php xpath: некорректно работает метод SimpleXMLElement->xpath()
|
|||
---|---|---|---|
#18+
Как оказалось, получаемый объект Код: php 1. 2. 3. 4. 5. 6.
не простой, а волшебный . Это только в виду он пустой. Но на самом деле не совсем пустой. Даже совсем не пустой. Если сделать вот так: Код: php 1.
то наконец-то получим значение найденного узла. При использовании любых других способов "вытаскивания" из него значения ( print_r , var_dump , reset , value и пр.) получим бублик с дыркой. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2016, 20:08 |
|
php xpath: некорректно работает метод SimpleXMLElement->xpath()
|
|||
---|---|---|---|
#18+
Ещё работают такие варианты: Код: php 1.
Код: php 1.
Код: php 1.
Код: php 1.
Код: php 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2016, 20:38 |
|
php xpath: некорректно работает метод SimpleXMLElement->xpath()
|
|||
---|---|---|---|
#18+
А чтобы не привязываться к индексу - так: Код: php 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2016, 21:12 |
|
php xpath: некорректно работает метод SimpleXMLElement->xpath()
|
|||
---|---|---|---|
#18+
http://stackoverflow.com/a/3109364 Don't use print_r() or var_dump() to inspect a SimpleXMLElement, they won't necessarily work on them because SimpleXML uses lots of magic behind the scene. Instead, look at what asXML() returns. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2016, 23:55 |
|
|
start [/forum/topic.php?fid=23&msg=39357303&tid=1460833]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 140ms |
0 / 0 |