2012-06-26 3 views
2

У меня есть нечетный XML-документ, который я должен запросить. Его выход из Weather.gov. Информация, которую я хотел бы запросить, находится в разделе:/Enelope/Body/NDFDgenResponse/dwmlOut. Его преобразованная форма XML. Можно ли запрашивать отдельные элементы под этим значением, или мне нужно будет отправить его на запрос в нем? Мое подозрение в том, что мне придется публиковать процесс.Запрос XML-содержимого внутри элемента

<?xml version="1.0" encoding="ISO-8859-1"?> 
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> 
    <SOAP-ENV:Body> 
     <ns1:NDFDgenResponse xmlns:ns1="http://graphical.weather.gov/xml/DWMLgen/wsdl/ndfdXML.wsdl"> 
      <dwmlOut xsi:type="xsd:string">&lt;?xml version=&quot;1.0&quot;?&gt; 
&lt;dwml version=&quot;1.0&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:noNamespaceSchemaLocation=&quot;http://graphical.weather.gov/xml/DWMLgen/schema/DWML.xsd&quot;&gt; 
    &lt;head&gt; 
    &lt;product srsName=&quot;WGS 1984&quot; concise-name=&quot;glance&quot; operational-mode=&quot;official&quot;&gt; 
     &lt;title&gt;NOAA&apos;s National Weather Service Forecast at a Glance&lt;/title&gt; 
     &lt;field&gt;meteorological&lt;/field&gt; 
     &lt;category&gt;forecast&lt;/category&gt; 
     &lt;creation-date refresh-frequency=&quot;PT1H&quot;&gt;2012-06-26T19:09:06Z&lt;/creation-date&gt; 
    &lt;/product&gt; 
    &lt;source&gt; 
     &lt;more-information&gt;http://graphical.weather.gov/xml/&lt;/more-information&gt; 
     &lt;production-center&gt;Meteorological Development Laboratory&lt;sub-center&gt;Product Generation Branch&lt;/sub-center&gt;&lt;/production-center&gt; 
     &lt;disclaimer&gt;http://www.nws.noaa.gov/disclaimer.html&lt;/disclaimer&gt; 
     &lt;credit&gt;http://www.weather.gov/&lt;/credit&gt; 
     &lt;credit-logo&gt;http://www.weather.gov/images/xml_logo.gif&lt;/credit-logo&gt; 
     &lt;feedback&gt;http://www.weather.gov/feedback.php&lt;/feedback&gt; 
    &lt;/source&gt; 
    &lt;/head&gt; 
    &lt;data&gt; 
    &lt;location&gt; 

..... </условия-значок > </параметры > </данные > </dwml >

+0

С чистого XPath возможно не. Но если вы вызываете XPath с любого другого языка, вы можете сначала выбрать этот узел в переменной типа строки, затем проанализировать эту строку как XML-документ и использовать второе выражение XPath для выбора чего-то изнутри. – biziclop

+0

Так что после обработки ... сделайте это, и я соглашусь – monksy

ответ

1

С чистого XPath, вероятно, нет. Но если вы вызовете XPath с любого другого языка, вы можете сначала выбрать этот узел в переменной типа строки, затем проанализировать эту строку как другой XML-документ и использовать второе выражение XPath для выбора узлов изнутри. это

Даже если это возможно с использованием чистого XPath, этот двухэтапный подход определенно намного проще кодировать, тестировать и поддерживать.

3

Это рабочий пример чистого XPath 3.0:

//dwmlOut/parse-xml(text())/dwml/head/product/title/text() 

Конечно, процессор XPath должен поддерживать версии 3.0, который Зорба например делает:

play with it online

+1

+1 Это хорошо известно, я пропустил что-то вроде 'parse-xml()' из XPath довольно много раз. – biziclop

+1

Я уверен, что процессор, с которым я работаю, - 2.0. Но это потрясающе! – monksy

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