給予這種XML文件的:連接多個屬性值
<data>
<row val="3"/>
<row val="7"/>
<row val="2"/>
<row val="4"/>
<row val="3"/>
</data>
我需要檢索字符串使用XPath 1.0,這樣我可以創建用於動態鏈接「3; 3 7; 2;; 4」我的XForms應用程序中的Google Chart服務。
我該怎麼做?可能嗎 ?
給予這種XML文件的:連接多個屬性值
<data>
<row val="3"/>
<row val="7"/>
<row val="2"/>
<row val="4"/>
<row val="3"/>
</data>
我需要檢索字符串使用XPath 1.0,這樣我可以創建用於動態鏈接「3; 3 7; 2;; 4」我的XForms應用程序中的Google Chart服務。
我該怎麼做?可能嗎 ?
的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只是其中一個選項。
+1''concat()'技巧。 :-) – Tomalak 2010-08-04 09:11:18
XSLT 1.0解決方案毫無意義。舉例來說,「position()」計算爲2,4,6,8和10,爲什麼它在那裏?此外,這將輸出每個值在一個新的行和縮進。 – Stijn 2015-02-13 08:55:00