Чтение тегов XML с помощью запроса XPath - PullRequest
0 голосов
/ 29 апреля 2020

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

Я заявляю, что у меня мало знаний по этому вопросу, поэтому я прошу прощения за неточности в технических терминология. После нескольких попыток мне удалось получить некоторые полезные для меня данные, такие как данные, представленные в узле Id c -> FileGroup -> value с запросом

//m:meta[2]/@value

, который возвращает различные значения «Значение» тегов на основе индексов 1,2,3 и т. Д. c ..

Несмотря на неоднократные попытки, я не смог создать запрос, позволяющий получить значение следующих тегов: Id c -> FileGroup-> File s: format-> Path

, что соответствует docs/002678E3.pdf и из TAG

Id C -> SelfDescription-ID S;

схема, которая соответствует

1520038843024

или, то же самое для меня,

"local">1520038843024

Не могли бы вы мне помочь?
Это мой XML:

<?xml version="1.0" encoding="UTF-8"?>
<IdC xmlns="http://www.uni.com/U3011/sincro/" xmlns:s="http://www.uni.com/U3011/sincro/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.uni.com/U3011/sincro/ UNI1138600_2010_EIT.xsd http://andxor.it/tDoc/lotto.xsd lotto.xsd http://andxor.it/tDoc/metadata.xsd metadata.xsd">
  <SelfDescription>
    <ID s:scheme="local">1520038843024</ID>
    <CreatingApplication>
      <Name>tDoc</Name>
      <Version>r16610</Version>
      <Producer>Andxor Soluzioni Informatiche srl</Producer>
    </CreatingApplication>
    <MoreInfo s:XMLScheme="http://andxor.it/tDoc/lotto.xsd">
      <EmbeddedMetadata>
        <lotto xmlns="http://andxor.it/tDoc/lotto.xsd">
          <company>SCOTT</company>
          <doctype>FATTURE_ATTIVE</doctype>
          <period>2018</period>
          <previous id="1519174898489">ED1C84CE3A825268E8434EFB80B9D09B4E0E9658F7A4D4FF5005CE6D10293388</previous>
        </lotto>
      </EmbeddedMetadata>
    </MoreInfo>
  </SelfDescription>
  <VdC>
    <ID s:scheme="local">1520038843024</ID>
  </VdC>
  <FileGroup xmlns:m="http://andxor.it/tDoc/metadata.xsd">
    <File s:format="application/pdf">
      <ID s:scheme="local">2521309</ID>
      <Path>docs/002678DD.pdf</Path>
      <Hash s:function="SHA-256">A041E222FC3F968EAED07405D9D8A32CD2A8BDB1952E8B726DDE3B7F55F20EE0</Hash>
      <MoreInfo s:XMLScheme="http://andxor.it/tDoc/metadata.xsd">
        <EmbeddedMetadata>
          <m:metadata>
            <m:meta class="internal" name="Data inserimento" value="2018-02-16T18:40:12+01:00"/>
            <m:meta name="Numero Fattura" value="970081952"/>
            <m:meta name="Data" value="2018-02-01"/>
            <m:meta name="Ragione Sociale" value="SCOTT ITALIA AUTOFATTURA CORRISPETT"/>
            <m:meta name="Codice Cliente" value="140422"/>
            <m:meta name="Partita Iva" value="IT03770200164"/>
          </m:metadata>
        </EmbeddedMetadata>
      </MoreInfo>
    </File>
    <File s:format="application/pdf">
      <ID s:scheme="local">2521315</ID>
      <Path>docs/002678E3.pdf</Path>
      <Hash s:function="SHA-256">6FF865D8ECA154E31D9E362B12E11EA79CE04EB92EB558C7C0AAC32A5883156F</Hash>
      <MoreInfo s:XMLScheme="http://andxor.it/tDoc/metadata.xsd">
        <EmbeddedMetadata>
          <m:metadata>
            <m:meta class="internal" name="Data inserimento" value="2018-02-16T18:40:18+01:00"/>
            <m:meta name="Numero Fattura" value="970081953"/>
            <m:meta name="Data" value="2018-02-02"/>
            <m:meta name="Ragione Sociale" value="SCOTT ITALIA AUTOFATTURA CORRISPETT"/>
            <m:meta name="Codice Cliente" value="140422"/>
            <m:meta name="Partita Iva" value="IT03770200164"/>
          </m:metadata>
        </EmbeddedMetadata>
      </MoreInfo>
    </File>
    <File s:format="application/pdf">
      <ID s:scheme="local">2521321</ID>
      <Path>docs/002678E9.pdf</Path>
      <Hash s:function="SHA-256">0F3755FA764DD00AA35D801908A4FEE9762C259CE18E2DC6BFAD50C49B013422</Hash>
      <MoreInfo s:XMLScheme="http://andxor.it/tDoc/metadata.xsd">
        <EmbeddedMetadata>
          <m:metadata>
            <m:meta class="internal" name="Data inserimento" value="2018-02-16T18:40:22+01:00"/>
            <m:meta name="Numero Fattura" value="970081954"/>
            <m:meta name="Data" value="2018-02-05"/>
            <m:meta name="Ragione Sociale" value="SCOTT ITALIA AUTOFATTURA CORRISPETT"/>
            <m:meta name="Codice Cliente" value="140422"/>
            <m:meta name="Partita Iva" value="IT03770200164"/>
          </m:metadata>
        </EmbeddedMetadata>
      </MoreInfo>
    </File>
    <File s:format="application/pdf">
      <ID s:scheme="local">2521335</ID>
      <Path>docs/002678F7.pdf</Path>
      <Hash s:function="SHA-256">F3FE57B26F49065BCAEEC8B5B7DB58B8F9AE0E93ED692D8771D9116F5F6472C0</Hash>
      <MoreInfo s:XMLScheme="http://andxor.it/tDoc/metadata.xsd">
        <EmbeddedMetadata>
          <m:metadata>
            <m:meta class="internal" name="Data inserimento" value="2018-02-16T18:41:14+01:00"/>
            <m:meta name="Numero Fattura" value="970081955"/>
            <m:meta name="Data" value="2018-02-06"/>
            <m:meta name="Ragione Sociale" value="SCOTT ITALIA AUTOFATTURA CORRISPETT"/>
            <m:meta name="Codice Cliente" value="140422"/>
            <m:meta name="Partita Iva" value="IT03770200164"/>
          </m:metadata>
        </EmbeddedMetadata>
      </MoreInfo>
    </File>
  </FileGroup>
  <Process>
    <Agent s:type="organization" s:role="PreservationManager">
      <AgentName>
        <FormalName>KPNQwest Italia SpA</FormalName>
      </AgentName>
      <Agent_ID s:scheme="TaxCode">07957860153</Agent_ID>
    </Agent>
    <Agent s:type="person" s:role="PreservationManager">
      <AgentName>
        <NameAndSurname>
          <FirstName>Giuseppe</FirstName>
          <LastName>Baccanelli</LastName>
        </NameAndSurname>
      </AgentName>
      <Agent_ID s:scheme="TaxCode">BCCGPP64C01A940D</Agent_ID>
    </Agent>
    <Agent s:type="person" s:role="PreservationManager">
      <AgentName>
        <NameAndSurname>
          <FirstName>Giuseppe</FirstName>
          <LastName>Baccanelli</LastName>
        </NameAndSurname>
      </AgentName>
      <Agent_ID s:scheme="TaxCode">BCCGPP64C01A940D</Agent_ID>
    </Agent>
    <Agent s:type="organization" s:role="OtherRole" s:otherRole="Other role">
      <AgentName>
        <FormalName>Amministratore</FormalName>
      </AgentName>
    </Agent>
    <TimeReference>
      <TimeInfo>2018-03-03T02:00:43+01:00</TimeInfo>
    </TimeReference>
    <LawAndRegulations s:language="it">DPCM 3 dicembre 2013</LawAndRegulations>
  </Process>
</IdC>

1 Ответ

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

Выражения XPath-1.0, которые вы ищете, вероятно,

  1. Первое: «создать запрос, который позволит мне получить значение следующих тегов»:

    Id C -> FileGroup -> Файл s: format -> Path

    1. Простой

      /IdC/FileGroup/File[@s:format]/Path
      
    2. Если вам нужно явно установить пространство имен, вы можете использовать

      /std:IdC/std:FileGroup/std:File[@s:format='application/pdf']/std:Path
      

      с пространствами имен, установленными на

      xmlns:std = "http://www.uni.com/U3011/sincro/" 
      xmlns:s   = "http://www.uni.com/U3011/sincro/"
      
    3. Или, если вы не можете установить пространства имен вообще (по любой причине) используйте

      /*[name()='IdC']/*[name()='FileGroup']/*[name()='File'][@*[local-name()='format' and .='application/pdf']]/*[name()='Path']
      

    Результат во всех трех случаях:

    docs / 002678DD.pdf

  2. Чтобы получить значение

    Id C -> SelfDescription -> ID

    , используйте эти выражения XPath-1.0 :

    1. С указанными выше пространствами имен:

      /std:IdC/std:SelfDescription/std:ID
      
    2. Без указанных выше пространств имен:

      /*[name()='IdC']/*[name()='SelfDescription']/*[name()='ID']
      

    Результат в обоих случаях:

    1520038843024

Надеюсь, это поможет.

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