как создать Xpath для каждого атрибута в XML - PullRequest
0 голосов
/ 21 марта 2019

У меня есть файл XML, и я хочу создать xpath для каждого атрибута в файле XML, используя Java или XSLT.

Образец XML -

<host> 
 <node> 
   <type>fruit1</type>
   <value>10</value>
 </node>
 <node>
   <type>fruit2</type>
   <value>20</value>
 </node>
 <node>
   <type>fruit3</type>
   <value xsi:type="valueList">
    <listValues>
      <value>
        <value>30</value>
        <code>abc</code>
      </value>
    </listValues>
   </value>
 </node>
 <node>
   <type>fruit4</type>
   <value>40</value>
 </node>  
 <node>
   <type>fruit5</type>
   <value>50</value>
 </node>
</host>

Ожидаемый результат -

host/node[1]/type[text()]
host/node[1]/value[text()]
host/node[2]/type[text()]
host/node[2]/value[text()]
host/node[3]/type[text()]
host/node[3]/value[@type = "valueList"]/listValues/value/value[text()]
host/node[3]/value[@type = "valueList"]/listValues/value/code[text()]
host/node[4]/type[text()]
host/node[4]/value[text()]
host/node[5]/type[text()]
host/node[5]/value[text()]

Любая помощь будет большим плюсом

1 Ответ

0 голосов
/ 21 марта 2019

Вы можете проверить это

 <xsl:template match="text()[normalize-space() ne '']">
    <xsl:text>&#xa;</xsl:text>
    <xsl:for-each select="ancestor::*">
        <xsl:value-of select="local-name()"/>
        <xsl:if test="following-sibling::*[local-name() = current()/local-name()] or preceding-sibling::*[local-name() = current()/local-name()]"><xsl:value-of select="concat('[', count(preceding-sibling::*[local-name() = current()/local-name()]) + 1 ,']')"></xsl:value-of></xsl:if>
        <xsl:for-each select="@*">
            <xsl:text>[@</xsl:text><xsl:value-of select="local-name(.)"/><xsl:text> = "</xsl:text><xsl:value-of select="."></xsl:value-of><xsl:text>"]</xsl:text>
        </xsl:for-each>
        <xsl:if test="position() ne last()">/</xsl:if>
        <xsl:if test="position() eq last()"><xsl:text>[text()]</xsl:text></xsl:if>
    </xsl:for-each>
</xsl:template>

проверить вывод на https://xsltfiddle.liberty -development.net / 94rmq6a

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