Использование xslt получить значение узла в позиции X
как я могу использовать xslt, значение узла в позиции X, без использования foreach
<items>
<item1>x</item1>
<item2>x</item2>
<item3>x</item3>
</items>
Это объясняется в смысле программирования:
<xsl:value-of select="Items/Item[2]"/>
==================================================
просто немного расширить вопрос, в следующем xml:
<items>
<about>xyz</about>
<item1>
<title>t1</title>
<body>b1</body>
</item1>
<item2>
<title>t2</title>
<body>b2</body>
</item2>
<item3>
<title>3</title>
<body>3</body>
</item3>
</items>
как я могу выбрать название элемента second.
4 ответов
ответ на расширенный вопрос. Вы можете использовать позиционное значение, если вы выбираете набор узлов требуемых элементов:
<xsl:value-of select="(items//title)[2]"/>
или:
<xsl:value-of select="(items/*/title)[2]"/>
обратите внимание на использование круглых скобок, необходимых для возврата требуемого набора узлов перед выбором по позиции.
вы можете использовать то, что вы назвали "в смысле программирования". Однако вам нужно *
из-за неизвестного названия дочерних элементов:
<xsl:value-of select="items/*[2]"/>
обратите внимание, что узлы-наборы в XSLT не нуля. В пути выше вы выбираете второй элемент, а не третий.
вам действительно нужны position()
когда вы хотите сравнить текущую позицию, с цифры, например:
<xsl:value-of select="items/*[position()>2]"/>
выделить все элемент С теркой положения чем 2. Другой случай где position()
не поддается описанию, когда значение позиции является переменной типа строка:
<xsl:variable name="pos" select="'2'"/>
<xsl:value-of select="items/*[position()=$pos]"/>
просто немного расширить вопрос, в следующем xml:
<items> <about>xyz</about> <item1> <title>t1</title> <body>b1</body> </item1> <item2> <title>t2</title> <body>b2</body> </item2> <item3> <title>3</title> <body>3</body> </item3> </items>
как я могу выбрать название элемента второго.
использовать:
/*/*[starts-with(name(), 'item')][2]/title
выбор: все title
элементы, являющиеся дочерними для второго из всех дочерних элементов-элементы верхнего элемента, имена которых начинаются со строки "item"
.
обратите внимание, что выражения такие as:
(items/*/title)[2]
или
(items//title)[2]
не верны вообще, потому что если в XML-документе есть другие элементы, такие как (скажем) "chapter"
что есть title
дети, вышеуказанные выражения могут выбрать chapter/title
элемент -- но задача здесь состоит в том, чтобы выбрать второй title
в документе, родителем которого может быть только item
XYZ элемент.