Свяжите несколько значений атрибута

Предоставление этого вида 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.

Как я могу сделать это? Действительно ли это возможно?

7
задан Tangui 3 August 2010 в 19:51
поделиться

2 ответа

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.

8
ответ дан 7 December 2019 в 03:09
поделиться

Невозможно в 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() &lt; last()">
    <xsl:text>;</xsl:text>
  </xsl:if>
</xsl:template>

XPath - это язык выбора, а не язык обработки. Вы можете обрабатывать узлы на любом другом языке программирования, который обеспечивает поддержку XML и XPath - XSLT - только один из вариантов.

1
ответ дан 7 December 2019 в 03:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: