Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: X технологии > Как правильно прописать путь в XPath


Автор: Raily 9.4.2012, 14:45
У меня есть такой XML (ниже привожу код). В нём содержатся курсы валют. Мне нужно выащить дату из первого тэга date.
Я пишу xPath, привожу сразу несколько вариантов:
Код

$xml=simplexml_load_string($data_curr); //$data_curr содержит строку с пришедшим XML

$data_curr = $xml->xpath('date[0]'); //первый вариант
$data_curr = $xml->xpath('exchange/date[0]'); //второй вариант
$data_curr = $xml->xpath('exchange/date[0]/d'); //третий вариант


Но все варианты при пропечатке выдают пустой массив,  у меня вопрос - как вытащить дату имеено в первом тэге date?

Код

<exchange>
    <date>
        <d>09.04.12 00:00</d>
        <currency>
            <curr>
                <chr_code>USD</chr_code>
                <val_name>Доллар США</val_name>
                <buy>29.0186</buy>
                <sale>29.9025</sale>
                <cbr>29.4606</cbr>
            </curr>
            <curr>
                <chr_code>EUR</chr_code>
                <val_name>Евро</val_name>
                <buy>37.936</buy>
                <sale>39.0915</sale>
                <cbr>38.5138</cbr>
            </curr>
        </currency>
    </date>
    <date>
        <d>09.04.12 11:10</d>
        <currency>
            <curr>
                <chr_code>USD</chr_code>
                <val_name>Доллар США</val_name>
                <buy>29.3722</buy>
                <sale>29.7552</sale>
                <cbr>29.4606</cbr>
            </curr>
            <curr>
                <chr_code>EUR</chr_code>
                <val_name>Евро</val_name>
                <buy>38.3212</buy>
                <sale>38.8989</sale>
                <cbr>38.5138</cbr>
            </curr>
        </currency>
    </date>
</exchange>

Автор: Fortop 9.4.2012, 20:04
http://www.w3schools.com/xpath/xpath_syntax.asp

Нумерация начинается с 1, а не с 0

Код

var_dump($xml->xpath('/exchange/date[1]'));
var_dump($xml->xpath('/exchange/date[0]'));
var_dump($xml->xpath('/exchange/date[1]/d'));


Код

array(1) {
  [0]=>
  object(SimpleXMLElement)#2 (2) {
    ["d"]=>
    string(14) "09.04.12 00:00"
    ["currency"]=>
    object(SimpleXMLElement)#3 (1) {
      ["curr"]=>
      array(2) {
        [0]=>
        object(SimpleXMLElement)#4 (5) {
          ["chr_code"]=>
          string(3) "USD"
          ["val_name"]=>
          string(19) "Доллар США"
          ["buy"]=>
          string(7) "29.0186"
          ["sale"]=>
          string(7) "29.9025"
          ["cbr"]=>
          string(7) "29.4606"
        }
        [1]=>
        object(SimpleXMLElement)#5 (5) {
          ["chr_code"]=>
          string(3) "EUR"
          ["val_name"]=>
          string(8) "Евро"
          ["buy"]=>
          string(6) "37.936"
          ["sale"]=>
          string(7) "39.0915"
          ["cbr"]=>
          string(7) "38.5138"
        }
      }
    }
  }
}
array(0) {
}
array(1) {
  [0]=>
  object(SimpleXMLElement)#2 (1) {
    [0]=>
    string(14) "09.04.12 00:00"
  }
}


Автор: Raily 10.4.2012, 14:49
Спасибо большое!!! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)