Извлечение значений условно из пространства имен XML с использованием XPath - PullRequest
0 голосов
/ 12 июня 2018

Мне нужно извлечь некоторую информацию из XML с использованием XPath ... XML выглядит следующим образом ...

<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" >
   <title type="text">DataEntities</title>
   <m:count>4</m:count>
   <entry>
      <id>0001</id>
      <title type="text">DataEntities</title>
      <content type="application/xml">
         <m:properties>
            <d:internalId>5b1daf597f3aee4f0d93e1ed</d:internalId>
            <d:datasetVersion>2</d:datasetVersion>
            <d:Product>PRODUCT0001</d:Product>
            <d:Version>6.0.0</d:Version>
            <d:Middleware>Apache WebServer</d:Middleware>
            <d:Versionmiddleware>2.2.31</d:Versionmiddleware>
            <d:Hostname>server01.mydomain.com</d:Hostname>
            <d:Technology>PHP</d:Technology>
         </m:properties>
      </content>
   </entry>
   <entry>
     <id>0002</id>
     <title type="text">DataEntities</title>
     <content type="application/xml">
        <m:properties>
           <d:internalId>5b1daf345f3aee4f0d34e1ed</d:internalId>
           <d:datasetVersion>2</d:datasetVersion>
           <d:Product>PRODUCT0002</d:Product>
           <d:Version>1.0.0</d:Version>
           <d:Middleware>Apache WebServer</d:Middleware>
           <d:Versionmiddleware>2.2.31</d:Versionmiddleware>
           <d:Hostname>server02.mydomain.com</d:Hostname>
           <d:Technology>Java</d:Technology>
        </m:properties>
     </content>
   </entry>
   <entry>
     <id>0003</id>
     <title type="text">DataEntities</title>
     <content type="application/xml">
        <m:properties>
           <d:internalId>5b1daf123f3aee4f0d33e1ed</d:internalId>
           <d:datasetVersion>2</d:datasetVersion>
           <d:Product>PRODUCT0003</d:Product>
           <d:Version>5.0.0</d:Version>
           <d:Middleware>Apache WebServer</d:Middleware>
           <d:Versionmiddleware>2.2.31</d:Versionmiddleware>
           <d:Hostname>server01.mydomain.com</d:Hostname>
           <d:Technology>PHP</d:Technology>
        </m:properties>
     </content>
   </entry>
   <entry>
     <id>0004</id>
     <title type="text">DataEntities</title>
     <content type="application/xml">
        <m:properties>
           <d:internalId>5b1daf345f3aee4f0d34e1ed</d:internalId>
           <d:datasetVersion>2</d:datasetVersion>
           <d:Product>PRODUCT0004</d:Product>
           <d:Version>4.0.0</d:Version>
           <d:Middleware>Apache WebServer</d:Middleware>
           <d:Versionmiddleware>2.2.31</d:Versionmiddleware>
           <d:Hostname>server01.mydomain.com</d:Hostname>
           <d:Technology>PHP</d:Technology>
        </m:properties>
     </content>
   </entry>
</feed>

Мне нужно найти продукты, которые находятся нато же имя хоста, , например, исправление сервера типа «server01.mydomain.com» для извлечения, как результат, PRODUCT0001, PRODUCT0003 и PRODUCT0004 (обратите внимание, не PRODUCT0002), или исправление сервера, например «server02.mydomain.com», чтобыИзвлеките, как результат, только PRODUCT0002.

Я пытался использовать

//d:Product

, и это работает, и результат

Element='<d:Product xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices">PRODUCT0001</d:Product>'
Element='<d:Product xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices">PRODUCT0002</d:Product>'
Element='<d:Product xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices">PRODUCT0003</d:Product>'
Element='<d:Product xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices">PRODUCT0004</d:Product>'

Я не знаюкак указать, что мне нужны "только" продукты, которые находятся на d:Hostname значении "server01.mydomain.com"

Я пытался использовать

//d:Product/@d:Hostname['server01.mydomain.com']

, но это не такне работает.

Какие-либо предложения по поводу синтаксиса XPath, который я должен использовать?

1 Ответ

0 голосов
/ 12 июня 2018

Если вы правильно связали префиксы пространства имен , как объявлено в вашем XML, с вашей библиотекой XPath, этот XPath

//m:properties[d:Hostname="server01.mydomain.com"]/d:Product

вернет эти d:Product элементы в m:properties с d:Hostname строковым значением, равным "server01.mydomain.com", согласно запросу.

...