2013-10-03 7 views
0

Я пытаюсь получить значение узла из стороннего источника. Часть Xmlstructure имеет узел, имя которого изменяется между точками и framedPoint. как получить значение широты? вот часть xml, их много уровней для xml, поэтому они показали соответствующую область.xpath фильтр при изменении имени родительского узла

здесь узел называется точкой

<tpegpointLocation xsi:type="TPEGSimplePoint"> 
    <point xsi:type="TPEGJunction"> 
     <pointCoordinates> 
      <latitude>54.894825</latitude> 
     </pointCoordinates> 
    </point> 
</tpegpointLocation> 

здесь framedPoint

<tpegpointLocation xsi:type="TPEGSimplePoint"> 
    <framedPoint xsi:type="TPEGJunction"> 
      <pointCoordinates> 
        <latitude>54.894825</latitude> 
      </pointCoordinates> 
    </framedPoint> 
</tpegpointLocation> 

Спасибо за любую помощь

ответ

0

Вы можете использовать звездочку в качестве шаблона в вашем XPath

/tpegpointLocation/*/pointCoordinates/latitude 
+0

не понимал, что на узле * существует узловой вызов «в» и имеет ту же структуру. Не представляется возможным использовать микс дикой карты с точкой, то есть * oint? – user2247671

+0

Нет таким образом; но вы можете использовать '* [end-with (name(), 'oint')]' –

+0

должен был упомянуть, что xml имеет пространство имен, поэтому мой xpath каждый узел выглядит как/x: latitude, .net, теперь ошибка и запрос для XsltContext нужен? – user2247671

0

ollowing XPath будет делать работу:

//tpegpointLocation//pointCoordinates/latitude 

Что означает:

  • //tpegpointLocation поиск всех <tpegpointLocation> элементов в файле XML
  • Второй //pointCoordinates означает поиск всех <pointCoordinates> элементов ниже <tpegpointLocation> независимо, какие элементы между ними (одно или несколько наименований
  • /latitude означает получить <latitude> ele ниже <pointCoordinates>

Обратите внимание, что используя // сканирует весь XML-файл. Если вы можете изменить //tpegpointLocation, было бы лучше и быстрее.

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