XML Парсинг - определить узел - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь выполнить анализ погоды XML, и у меня возникла проблема с определением значения.

Вот это XML:

  <?xml version = '1.0' encoding = 'UTF-8' standalone = 'yes'?>
  <?xml-stylesheet href='capatomproduct.xsl' type='text/xsl'?>
  <alert xmlns = 'urn:oasis:names:tc:emergency:cap:1.1'>


 <identifier>NOAA-NWS-ALERTS-CA125F41908654.WindAdvisory.125F45BC9560CA.LOXNPWLOX.8506e7c6b4c175d3da1cebc9b9bc1cea</identifier>
 <sender>w-nws.webmaster@noaa.gov</sender>
 <sent>2020-03-31T11:37:00-07:00</sent>
 <status>Actual</status>
 <msgType>Alert</msgType>
 <scope>Public</scope>
 <note>Alert for Los Angeles County Mountains excluding the Santa Monica Range; Ventura County Mountains (California) Issued by the National Weather Service</note>
 <info>
 <category>Met</category>
 <event>Wind Advisory</event>
 <urgency>Expected</urgency>
 <severity>Minor</severity>
 <certainty>Likely</certainty>
 <eventCode>
 <valueName>SAME</valueName>
 <value></value>
 </eventCode>
 <effective>2020-03-31T15:00:00-07:00</effective>
 <expires>2020-04-01T11:00:00-07:00</expires>
 <senderName>NWS Oxnard (The Los Angeles Area)</senderName>
 <headline>Wind Advisory issued March 31 at 11:37AM PDT until April 01 at 11:00AM PDT by NWS Oxnard</headline>
 <description>...WIND ADVISORY IN EFFECT FROM 3 PM THIS AFTERNOON TO 11 AM PDT
 WEDNESDAY...
 * WHAT...Northwest winds 15 to 25 mph with gusts 45 to 50 mph
 expected.
 * WHERE...Ventura County Mountains and Los Angeles County
 Mountains excluding the Santa Monica Range.
 * WHEN...From 3 PM this afternoon to 11 AM PDT Wednesday.
 * IMPACTS...Gusty winds will blow around unsecured objects and
 make driving difficult, especially for high profile vehicles.
 Tree limbs could be blown down and a few power outages may
 result.
 <parameter>
 <valueName>WMOHEADER</valueName>
 <value></value>
 </parameter>
 <parameter>
 <valueName>UGC</valueName>
 <value>CAZ053-054</value>
 </parameter>
 <parameter>
 <valueName>VTEC</valueName>
 <value>/O.NEW.KLOX.WI.Y.0024.200331T2200Z-200401T1800Z/</value>
 </parameter>
 <parameter>
 <valueName>TIME...MOT...LOC</valueName>
 <value></value>
 </parameter>
 <area>
 <areaDesc>Los Angeles County Mountains excluding the Santa Monica Range;     Ventura County Mountains</areaDesc>
 <polygon></polygon>
 <geocode>
 <valueName>FIPS6</valueName>
 <value>006037</value>
 </geocode>
 <geocode>
 <valueName>FIPS6</valueName>
 <value>006111</value>
 </geocode>
 <geocode>
 <valueName>UGC</valueName>
 <value>CAZ053</value>
 </geocode>
 <geocode>
 <valueName>UGC</valueName>
 <value>CAZ054</value>
 </geocode>
 </area>
 </info>
 </alert>

В настоящее время я получаю такие предметы, как эффективные, используя capXmlDo c .alert.info.effective.XmlText

Но то, что я пытаюсь извлечь это значение в cap: параметр: /O.EXT.KCLE.FL.W.0033.000000T0000Z-200401T0000Z/ /KILO1.1.ER.200330T1315Z.200331T0000Z.200331T1800Z.NO/

Я думал, что это будет - capXmlDo c .alert.info.parameter.value.XmlText

Но это не так. Я что-то пропустил? Буду очень признателен за любую помощь.

Спасибо !!!

1 Ответ

0 голосов
/ 01 апреля 2020

Ваш xml по-прежнему недействителен на 100%, но как только вы исправите это и, если я правильно вас понимаю, вы можете извлечь из него некоторую информацию (строго используя xpath) с помощью некоторых выражений xpath, таких как:

//alert/info/effective

Выход:

2020-03-31T15:00:00-07:00

и

//info/parameter/value[text()]

выходы:

CAZ053-054
/O.NEW.KLOX.WI.Y.0024.200331T2200Z-200401T1800Z/
...