Предоставление этого вида XML-файла:
<data>
<row val="3"/>
<row val="7"/>
<row val="2"/>
<row val="4"/>
<row val="3"/>
</data>
Я должен получить строку '3; 7; 2; 4; 3' XPath 1.0 использования так, чтобы я мог создать динамические каналы для сервиса Google Chart в моем приложении XForms.
Как я могу сделать это? Действительно ли это возможно?
XPath 2.0 решение:
string-join(/data/row/@val,';')
XSLT 1.0 решение:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="row">
<xsl:value-of select="concat(substring(';',1,position()-1),@val)"/>
</xsl:template>
</xsl:stylesheet>
EDIT: Краткое решение XSLT 1.0.
Невозможно в XPath (по крайней мере, не в XPath 1.0, которая, я полагаю, является вашей версией).
Используя XSLT, это было бы просто:
<xsl:template match="/data">
<!-- select all rows for processing -->
<xsl:apply-templates select="row" />
</xsl:template>
<!-- rows are turned into CSV of their @val attributes -->
<xsl:template match="row">
<xsl:value-of select="@val" />
<xsl:if test="position() < last()">
<xsl:text>;</xsl:text>
</xsl:if>
</xsl:template>
XPath - это язык выбора, а не язык обработки. Вы можете обрабатывать узлы на любом другом языке программирования, который обеспечивает поддержку XML и XPath - XSLT - только один из вариантов.