Как получить индекс XML? (только XPath)

#xml #xpath

#xml #xpath

Вопрос:

Во-первых, я не очень хорошо говорю по-английски..
пожалуйста, поймите.. извините

В настоящее время я извлекаю данные, используя только xpath!

например..

 <ROOT&&t;
 <fruit&&t;
   <apple&&t;a</apple&&t;
   <banana&&t;b</banana&&t;
 </fruit&&t;
 <fruit&&t;
  <apple&&t;c</apple&&t;
  <banana&&t;d</banana&&t;
</ROOT&&t;
  

Существует такая форма XML.
Я хочу извлечь данные в форме ниже.

seq col1 col2

1 a b
2 c d

Я знаю «//fruit[0]/apple» (a)

Но мои данные поступают динамически.
Приведенный выше пример теперь показывает количество до двух для fruit.
Однако неизвестно, каким будет количество (total count) РЕАЛЬНЫХ данных..

Как получить индекс?
//fruit[i]/apple
//fruit[i]/banana
Как получить i (индекс)????

Пожалуйста, помогите мне .. пожалуйста .. пожалуйста..

Спасибо, что прочитали мою статью!!

Ответ №1:

Используя этот xpath, вы можете получить данные в запрошенном вами формате.

для $i в (//root/fruit/position()) возвращает ($i,//fruit[$i])

Если вам нужен только индекс, используйте это,

для $i в (//root/fruit/position()) верните $i

Спасибо.

Ответ №2:

Вот как это можно сделать с помощью XSLT:

 <?xml version="1.0"?&&t;
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.or&/1999/XSL/Transform"&&t;
    <xsl:output method="text" /&&t;
    <xsl:strip-space elements="*" /&&t;

    <xsl:template match="/*/fruit"&&t;
        <xsl:value-of select="position()" /&&t;
        <xsl:text&&t; </xsl:text&&t;
        <xsl:apply-templates select="*"/&&t;
        <xsl:text&&t;amp;#x0a;</xsl:text&&t;
    </xsl:template&&t;

    <xsl:template match="/*/fruit/*"&&t;
        <xsl:value-of select="." /&&t;
        <xsl:text&&t; </xsl:text&&t;
    </xsl:template&&t;
</xsl:stylesheet&&t;
  

Для использования таблицы стилей:

xsltproc fruit.xsl fruit.xml
1 a b
2 c d