2011-02-18 2 views
0

Я файл XML так:PHP XPATH в изменении структуры XML

<tr class="station"> 
    <td class="realtime"> 
    <span> 
     15:11 
    </span> 
    </td> 
</tr> 

<tr class="station"> 
    <td class="clock"> 
    15:20 
    </td> 
</tr> 

<tr class="station"> 
    <td class="clock"> 
    15:30 
    </td> 
</tr> 

<tr class="station"> 
    <td class="realtime"> 
    <span> 
     15:41 
    </span> 
    </td> 
</tr> 

и я хочу разобрать его с помощью XPath в PHP. Xml обновляется и анализируется довольно часто.
Я всегда хочу получить первый раз (в этом случае 15:11)
Проблема в том, что его не уверен, является ли окружающий тег td классом «clock» или «realtime».
Если есть так окружающее реальное время, то внутри есть тег span. В противном случае нет.
Фактически, его всегда является первым «станционным» -классическим тегом, в котором важна информация. Так можно ли рассказать xpath просто оценить внутри этого тега?
Есть ли хороший способ для этого в xpath?
(SRY за мой плохой английский)

+0

Там нет в вашей выборке нет 15:11? Однако получение первого элемента было бы тривиальным. Если это полный фрагмент HTML, просто сделайте '// td' для вашего xpath, который вернет массив всех элементов' ', а затем извлечет .innerTEXT только первую запись в этом массиве, которая была бы самой сначала 15:41 вашего образца. –

+0

sry, ur правый! первый «15:41» должен был быть «15:11». Исправлено. – Lars

ответ

2

В самом деле, его всегда первая «станция» -класса тег, в котором информация есть, что имеет значение. Так это можно рассказать xpath только оценить в пределах этого тега?

С этим wellformed источник входного сигнала:

<table> 
    <tr class="station"> 
     <td class="realtime"> 
      <span> 
       15:41 
      </span> 
     </td> 
    </tr> 
    <tr class="station"> 
     <td class="clock"> 
      15:20 
     </td> 
    </tr> 
    <tr class="station"> 
     <td class="clock"> 
      15:30 
     </td> 
    </tr> 
    <tr class="station"> 
     <td class="realtime"> 
      <span> 
       15:41 
      </span> 
     </td> 
    </tr> 
</table> 

Это выражение XPath:

/table/tr[@class='station'][1]/td 

Примечание: Просто выберите элемент, который вы хотите, и использовать правильный метод DOM API, чтобы получить строковое значение. Неважно, есть ли элемент span или нет.

Если вы хотите ...

/table/tr[@class='station'][1]/td//text() 
+0

+1 для правильного ответа. –

+0

+1. Правильный ответ. – Flack

Смежные вопросы