Как манипулировать XML-данными с помощью XPath

У меня возникают проблемы с обработкой данных файла XML в Acrobat JS. У меня уже есть XML-документ, и я его прочитал. Теперь XML выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<xfa:data xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/">
<mapData>
<busline>  
  <id>4</id>  
  <name>K222</name>
  <stationList>
  <station>  
  <name>FirstStation</name>
  <stationAnnotName>station</stationAnnotName>  
  <cordX>-309</cordX>   
  </station>  
  <station>  
  <name>222first</name>  
  <stationAnnotName>station3</stationAnnotName>
  <cordX>-315</cordX>  
  </station>  
  </stationList>  
</busline>  
<busline>  
  <id>5</id>  
  <name>K333</name>     <-----find busline name == K333 and delete this busline node
  <stationList>
  <station>  
  <name>ss</name>
  <stationAnnotName>station</stationAnnotName>  
  <cordX>-309</cordX>   
  </station>  
  <station>  
  <name>Target</name>    <-----query by this station name
  <stationAnnotName>station3</stationAnnotName>
  <cordX>*-315*</cordX>  <----need this value
  </station>  
  </stationList>  
</busline>
</mapData>
</xfa:data>

В Adobe Acrobat у нас есть вызов метода XMLData.applyXPath(oXML,sringXPath). Теперь я хочу получить значение cordX узла станции, имя которого == Target. Другими словами, у нас есть много разных узлов станций, принадлежащих statinList->busline->mapData->(xfa:data?)

Итак, как мне написать XPath, чтобы найти его, и если я хочу удалить шину, у которой есть имя узла станции, это Target. Я буду использовать цвет, чтобы было понятно.

Поэтому мне нужно получить station.cordX по его имени (красный цвет), удалить шину, которая busine.name == K333 (синий цвет)

Я ценю вашу помощь. нужна ваша помощь как можно скорее.


person Rayborn1105    schedule 14.04.2012    source источник


Ответы (1)


Вы можете получить весь список станций, значение тега имени которого равно Target.

//busline/stationlist[name='Target']/name
person UVM    schedule 14.04.2012
comment
да, спасибо, это работает, но как мне удалить node/rvar root = XMLData.applyXPath(mapXML,//mapData); var deleteBUSLINE = XMLData.applyXPath(mapXML,//mapData/busline[annotName='+willDeleteBuslineAnnotName+']); var deleteID = parseInt(deleteBUSLINE.id.value); //===функция удаления=========== root.nodes.remove(root.deleteBUSLINE); {эта строка не работает} Как удалить шину с именем K333 из корня mapData. - person Rayborn1105; 14.04.2012
comment
вы можете применить обычный обход DOM для удаления узла. Одним из таких примеров является newXMLNodes.ParentNode.RemoveChild(newXMLNodes); тогда как newXMLNode будет набором узлов, которые возвращаются после применения xpath. Я не знаю об AdobeJS. Будет варьироваться в зависимости от реализации - person UVM; 14.04.2012