Построение темы на этом форуме: How do I select an XML node with the longest child #text node value with XPath? Я пытаюсь найти самую длинную ячейку в столбце 1 таблицы. К сожалению, я не знаю, сколько предков имеет таблица, а иногда есть несколько внутри одного текстового элемента, к которым нужно относиться иначе.Поиск самой длинной ячейки в таблице с XSLT 2.0
XML-
<text><table cols="3" rows="2">
<row >
<cell >first cell first row</cell>
<cell >second cell first row
</cell>
<cell >third cell first row
</cell>
</row>
<row >
<cell >first cell second row</cell>
<cell >this is an incredible long text</cell>
<cell />
</row>
</table>
</text>
XSLT:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="table">
<xsl:variable name="longest1">
<xsl:sequence select=
"/*/table/row/cell[1][not(string-length(.) < /*/table/row/cell[1]/string-length(.))]"/>
</xsl:variable>
<xsl:value-of select="longest1">
</xsl:template>
</xsl:stylesheet>
Выход конечно должен быть "первая ячейка вторая строка", а второй столбец не является обработанный. Я совершенно уверен, что все, что нужно сделать, это исправить/* этой линии:
<xsl:sequence select=
"/*/table/row/cell[1][not(string-length(.) < /*/table/row/cell[1]/string-length(.))]"/>
Но я не могу управлять, чтобы увидеть решение.
мне пришлось прибегнуть к вашему решению с сортировкой, потому что другой не работает, когда есть больше ячеек одинаковой длины: | | | | будет составлять, как ААА. Я предполагаю, что это связано с «ниже чем» и должно быть «ниже или равно», но это не помогло. Сортировка, с другой стороны, сразу работала! –
martinanton
Вы можете использовать '
О, тогда я, должно быть, испортил это, внедряя его в моем реальном жизненном потоке, где он произвел указанную ошибку. Но он работает сейчас – martinanton