這是我正在嘗試實現的: 我有一個CSV文件,其數據類似1,4,5 ..等等(不是一個固定的系列),我有一個XML是有某些節點重複。現在從該XML中,我需要刪除所有那些位置在CSV文件中的節點。在XSLT中比較CSV
這就是我想要做到的: 我將CSV文件作爲參數傳遞給XSLT並調用遞歸模板來打印XML。 (感謝我看到了很長一段時間back..don't記住地址後)
問題:「這是行不通的」 :)
下面是我的示例XML和XSLT。任何幫助,將不勝感激。
XML:
<?xml version="1.0" encoding="UTF-8"?>
<Items>
<Item IItemID="">
</Item>
<Item ItemID="100-8754">
</Item>
<Item ItemID="206-4141">
</Item>
<Item ItemID="">
</Item>
</Items>
這裏是XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xdt="http://www.w3.org/2005/xpath-datatypes">
<xsl:param name="ErrorPos" as="xs:string" select="'1,4'"/>
<xsl:template match="*|/">
<xsl:call-template name="commaSplit">
<xsl:with-param name="dataString" select="$ErrorPos"/>
<xsl:with-param name="position" select="1"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="commaSplit">
<xsl:param name="dataString"/>
<xsl:param name="position"/>
Vivek
<xsl:choose>
<xsl:when test="contains($dataString,',')">
<!-- Select the first value to process -->
<xsl:call-template name="getItems">
<xsl:with-param name="errorPosition" select="substring-before($dataString,',')"/>
<xsl:with-param name="position" select="$position"/>
</xsl:call-template>
<!-- Recurse with remainder of string -->
<xsl:call-template name="commaSplit">
<xsl:with-param name="dataString" select="substring-after($dataString,',')"/>
<xsl:with-param name="position" select="$position + 1"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<!-- This is the last value no need to recurse -->
<xsl:call-template name="getItems">
<xsl:with-param name="errorPosition" select="$dataString"/>
<xsl:with-param name="position" select="$position"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- Process of individual value here -->
<xsl:template name="getItems" match="/">
<xsl:param name="errorPosition"/>
<xsl:param name="position"/>
<Items>
<xsl:value-of select="$errorPosition"/>
<xsl:value-of select="concat(',',$position)"/><!--Just for testing...will be replaced by copy statement-->
</Items>
</xsl:template>
</xsl:stylesheet>
XSLT的任何原因?正如你發現的那樣,XSLT不知道CSV,這使得CSV成爲絕對的平衡器。所以通過C#/ Java/{chioce語言}中的DOM操作來實現這一點會更容易。 –
沒有克里斯......其實我們並沒有使用C#..但是我在JAVA中並沒有那麼高興,所以如果你能提供相同的指針,我會很樂意瀏覽。 – Kapil
這就是爲什麼我在列表中添加了{語言的選擇},因爲幾乎每個環境都有一個XML DOM解析器,這就是爲什麼我問你爲什麼只限於XSLT。 –