Xpath - выбор и чтение значения всех дочерних узлов, независимо от имени - PullRequest
0 голосов
/ 20 сентября 2019

Я работаю над преобразованием xsl, которое превращает XML-документ ISO 19139-2 (2009) в некоторые текстовые строки (плагин схемы GeoNetwork index-fields / index.xsl , который, в свою очередь,прочитано экземпляром ElasticSearch).Внутри определенного элемента я пытаюсь:

  1. выбрать всех потомков этого узла с конкретным точным именем узла
  2. получить все
  3. непосредственные *1011* дочерние узлы вышеупомянутого узла, за исключением тех, которые имеют определенное имя

1 Ответ

0 голосов
/ 20 сентября 2019

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

      <xsl:for-each select="gmi:acquisitionInformation/*">        
        <xsl:for-each select=".//gmi:MI_Operation">
          <operationDetails>{
            <xsl:for-each select="./*[name() != 'gmi:platform']">
              &quot;<xsl:value-of select="name()"/>&quot;:&quot;<xsl:value-of select="."/>&quot;,
            </xsl:for-each>
          }</operationDetails>
        </xsl:for-each>       

        <xsl:for-each select=".//gmi:MI_Platform">
          <platformDetails>{
            <xsl:for-each select="./*[name() != 'gmi:instrument']">
              &quot;<xsl:value-of select="name()"/>&quot;:&quot;<xsl:value-of select="."/>&quot;,
            </xsl:for-each>
          }</platformDetails>
        </xsl:for-each>        

       <xsl:for-each select=".//gmi:MI_Instrument">
          <instrumentDetails>{
            <xsl:for-each select="./*">
              &quot;<xsl:value-of select="name()"/>&quot;:&quot;<xsl:value-of select="."/>&quot;,
            </xsl:for-each>
          }</instrumentDetails>
        </xsl:for-each>      
      </xsl:for-each>

Для тех, кто хочет использовать это в GeoNetwork, я поместил это непосредственно в разделе для gmd:distributionInfo (начиная со строки <xsl:for-each select="gmd:distributionInfo/*>) в плагине моей схемы index-fields\index.xsl.Это поднимает блок gmi:acquisitionInformation в пределах gmi:MI_Metadata при условии, что вы также измените соответствие корневого шаблона для размещения gmi:MI_Metadata.

...