powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Получить атрибут из XML в цикле
7 сообщений из 7, страница 1 из 1
Получить атрибут из XML в цикле
    #38277663
buuza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, у меня проблема с парсингом XML ответа, нужно получить в цикле FOREACH значение аттрибута PRICE(смотри под спойлером), для конкретного ROOM CODE и DATE. Никак не могу правильно сделать, плиз хелп

<ns2:availability date="2013-05-28">
<ns2:avail rate_code="VR" seld_type="C" avail_num="7" extra_avail_num="7" modify="Y" planning="GEN" avail_sequence="DUSG">
<ns2:room code="SG">
<ns2:mealplan code="BB" price="119.0" currency="EUR"/>
<ns2:mealplan code="HC" price="30.0" currency="EUR"/>
<ns2:mealplan code="OB" price="101.0" currency="EUR"/>
</ns2:room>
<ns2:room code="DU">
<ns2:mealplan code="BB" price="300.0" currency="EUR"/>
<ns2:mealplan code="OB" price="96.0" currency="EUR"/>
</ns2:room>
</ns2:avail>
<ns2:avail rate_code="VR" seld_type="C" avail_num="2" extra_avail_num="2" modify="Y" planning="GEN" avail_sequence="SJ">
<ns2:room code="SJ">
<ns2:mealplan code="BB" price="405.0" currency="EUR"/>
<ns2:mealplan code="OB" price="345.0" currency="EUR"/>
</ns2:room>
</ns2:avail>
<ns2:avail rate_code="VR" seld_type="C" avail_num="3" extra_avail_num="3" modify="Y" planning="GEN" avail_sequence="TNTP">
<ns2:room code="TN">
<ns2:mealplan code="BB" price="250.0" currency="EUR"/>
<ns2:mealplan code="OB" price="125.5" currency="EUR"/>
</ns2:room>
<ns2:room code="TP">
<ns2:mealplan code="BB" price="20.0" currency="EUR"/>
<ns2:mealplan code="OB" price="411.0" currency="EUR"/>
</ns2:room>
</ns2:avail>
<ns2:avail rate_code="VR" seld_type="C" avail_num="0" extra_avail_num="0" modify="Y" planning="GEN" avail_sequence="TL">
<ns2:room code="TL">
<ns2:mealplan code="BB" price="190.0" currency="EUR"/>
<ns2:mealplan code="OB" price="251.0" currency="EUR"/>
</ns2:room>
</ns2:avail>
<ns2:avail rate_code="VR" seld_type="C" avail_num="7" extra_avail_num="4" modify="Y" planning="GEN" avail_sequence="DBTW">
<ns2:room code="DB">
<ns2:mealplan code="BB" price="375.0" currency="EUR"/>
<ns2:mealplan code="OB" price="325.0" currency="EUR"/>
</ns2:room>
<ns2:room code="TW">
<ns2:mealplan code="BB" price="50.0" currency="EUR"/>
<ns2:mealplan code="OB" price="401.0" currency="EUR"/>
</ns2:room>
</ns2:avail>
<ns2:avail rate_code="VR" seld_type="C" avail_num="0" extra_avail_num="0" modify="Y" planning="GEN" avail_sequence="CDCN">
<ns2:room code="CD">
<ns2:mealplan code="BB" price="20.0" currency="EUR"/>
<ns2:mealplan code="OB" price="16.0" currency="EUR"/>
</ns2:room>
<ns2:room code="CN">
<ns2:mealplan code="BB" price="465.0" currency="EUR"/>
<ns2:mealplan code="OB" price="405.0" currency="EUR"/>
</ns2:room>
</ns2:avail>
</ns2:availability>


<ns2:availability date="2013-05-29">
<ns2:avail rate_code="VR" seld_type="C" avail_num="0" extra_avail_num="0" modify="Y" planning="GEN" avail_sequence="CDCN">
<ns2:room code="CD">
<ns2:mealplan code="BB" price="20.0" currency="EUR"/>
<ns2:mealplan code="OB" price="16.0" currency="EUR"/>
</ns2:room>
<ns2:room code="CN">
<ns2:mealplan code="BB" price="465.0" currency="EUR"/>
<ns2:mealplan code="OB" price="405.0" currency="EUR"/>
</ns2:room>
</ns2:avail>
<ns2:avail rate_code="VR" seld_type="C" avail_num="7" extra_avail_num="7" modify="Y" planning="GEN" avail_sequence="DBTW">
<ns2:room code="DB">
<ns2:mealplan code="BB" price="375.0" currency="EUR"/>
<ns2:mealplan code="OB" price="325.0" currency="EUR"/>
</ns2:room>
<ns2:room code="TW">
<ns2:mealplan code="BB" price="50.0" currency="EUR"/>
<ns2:mealplan code="OB" price="401.0" currency="EUR"/>
</ns2:room>
</ns2:avail>
<ns2:avail rate_code="VR" seld_type="C" avail_num="3" extra_avail_num="3" modify="Y" planning="GEN" avail_sequence="TNTP">
<ns2:room code="TN">
<ns2:mealplan code="BB" price="250.0" currency="EUR"/>
<ns2:mealplan code="OB" price="125.5" currency="EUR"/>
</ns2:room>
<ns2:room code="TP">
<ns2:mealplan code="BB" price="20.0" currency="EUR"/>
<ns2:mealplan code="OB" price="411.0" currency="EUR"/>
</ns2:room>
</ns2:avail>
<ns2:avail rate_code="VR" seld_type="C" avail_num="0" extra_avail_num="0" modify="Y" planning="GEN" avail_sequence="TL">
<ns2:room code="TL">
<ns2:mealplan code="BB" price="190.0" currency="EUR"/>
<ns2:mealplan code="OB" price="251.0" currency="EUR"/>
</ns2:room>
</ns2:avail>
<ns2:avail rate_code="VR" seld_type="C" avail_num="2" extra_avail_num="2" modify="Y" planning="GEN" avail_sequence="SJ">
<ns2:room code="SJ">
<ns2:mealplan code="BB" price="405.0" currency="EUR"/>
<ns2:mealplan code="OB" price="345.0" currency="EUR"/>
</ns2:room>
</ns2:avail>
<ns2:avail rate_code="VR" seld_type="C" avail_num="7" extra_avail_num="7" modify="Y" planning="GEN" avail_sequence="DUSG">
<ns2:room code="SG">
<ns2:mealplan code="BB" price="119.0" currency="EUR"/>
<ns2:mealplan code="HC" price="30.0" currency="EUR"/>
<ns2:mealplan code="OB" price="101.0" currency="EUR"/>
</ns2:room>
<ns2:room code="DU">
<ns2:mealplan code="BB" price="66.0" currency="EUR"/>
<ns2:mealplan code="TI" price="136.0" currency="EUR"/>
</ns2:room>
</ns2:avail>
</ns2:availability>
...
Рейтинг: 0 / 0
Получить атрибут из XML в цикле
    #38277763
mhx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mhx
Гость
Код: xml
1.
2.
3.
<xsl:for-each select="//ns2:availability[@date='2013-05-29']//ns2:room[@code='TW']/*">
    <price><xsl:value-of select="@price" /></price>
</xsl:for-each>
...
Рейтинг: 0 / 0
Получить атрибут из XML в цикле
    #38279175
buuza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mhx
Код: xml
1.
2.
3.
<xsl:for-each select="//ns2:availability[@date='2013-05-29']//ns2:room[@code='TW']/*">
    <price><xsl:value-of select="@price" /></price>
</xsl:for-each>



Спасибо за ответ.
Есть вариант с исползованием DOMDocument PHP(getElementsByTagName, getAttribute)???
...
Рейтинг: 0 / 0
Получить атрибут из XML в цикле
    #38279498
mhx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mhx
Гость
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?php
$xml = new DOMDocument ('1.0', 'UTF-8');
$xml->load ('10.xml');
$xpath = new DOMXPath ($xml);
$nodes = $xpath->query ('//ns2:availability[@date="2013-05-29"]//ns2:room[@code="TW"]/*');
foreach ($nodes as $node)
{
    if ($node->hasAttributes ())
    {
        $price = $node->getAttribute ('price');
        echo "Price: $price\n";
    }
}


Это аналог вышеприведенного XSL
...
Рейтинг: 0 / 0
Получить атрибут из XML в цикле
    #38282001
buuza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mhx,

спасибо, реализовал через getElementsByTagName и getAttribute(слишком большой код, но главное работает), не до конца понял как все-таки работает xPath,
например здесь:
$nodes = $xpath->query ('//ns2:availability[@date="2013-05-29"]//ns2:room[@code="TW"]/*');

Я могу сделать так:
$nodes = $xpath->query ('//ns2:availability[@date="$row->date"]//ns2:room[@code="$row->occupancy"]/*'); ?
...
Рейтинг: 0 / 0
Получить атрибут из XML в цикле
    #38283141
mhx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mhx
Гость
Если в переменных $row->date и $row->occupancy хранятся строки, то да
...
Рейтинг: 0 / 0
Получить атрибут из XML в цикле
    #38283145
mhx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mhx
Гость
Стоп, вру. Нет, переменные не обрабатываются внутри одинарных кавычек (апострофов). Что-то типа такого
Код: php
1.
$nodes = $xpath->query ("//ns2:availability[@date='{$row->date}']//ns2:room[@code='{$row->occupancy}']/*");
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Получить атрибут из XML в цикле
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]