我正在嘗試編寫一個可以幫助從另一個XML文檔過濾數據的文檔。例如。使用自定義標記語言過濾XML數據
<document>
<filter>
<what>
<include>
<marital_staus/>
<ms>single</ms> <!--nog = no of groups-->
<include>
<memberofgroups/>
<gn>Football club</gn> <!--user is a member of this club-->
</include>
</include>
</what>
</filter>
<users>
<user>
<name>
<first>abc</first>
<last>xyz</last>
</name>
<dob>12/02/1987</dob>
<marital_status>married</marital_status>
<groups>
<member_of_group>Chess Club</member_of_group>
<member_of_group>Football club</member_of_group>
</groups>
</user>
<user>
<name>
<first>aaa</first>
<last>bbb</last>
</name>
<dob>14/03/1987</dob>
<marital_status>single</marital_status>
<groups>
<member_of_group>Chess Club</member_of_group>
<member_of_group>Football club</member_of_group>
</groups>
</user>
<user>
<name>
<first>fff</first>
<last>nnn</last>
</name>
<dob>12/6/1983</dob>
<marital_status>single</marital_status>
<groups>
<member_of_group>Chess Club</member_of_group>
<member_of_group>Cultural Association</member_of_group>
</groups>
</user>
</users>
</document>
我想這段代碼做的是選擇,第一,誰是足球俱樂部的成員,然後掉那些的用戶,選擇誰是單一的用戶。但我無法弄清楚如何爲此編寫樣式表。我寫這個:
<xsl:template name="temp">
<xsl:param name="a1"/>
<xsl:param name="pro"/>
<xsl:choose>
<xsl:when test="$pro = 'marital_status'">
<xsl:for-each select="/document/users/user">
<xsl:if test="marital_status=$a1">
<xsl:value-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:when>
<xsl:when test="$pro = 'memberofgroups'">
<xsl:for-each select="/document/users/user">
<xsl:for-each select="./groups/member_of_group">
<xsl:if test=".=$a1">
<xsl:value-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="include">
<xsl:call-template name="temp">
<xsl:with-param name="a1">
<xsl:apply-templates select="*[2]"/>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
在調用模板時,我傳遞正確的值,我想。
問題是我得到所有單身用戶以及所有屬於該特定羣體成員的用戶。不過,我希望單身用戶也是足球俱樂部的成員。我不希望樣式表被硬編碼,因爲我也想基於其他元素進行過濾。
我無法弄清楚如何將過濾的元素保存到可用作下一個XPath表達式的輸入的內容中。或者我在編寫用於過濾文檔的約束時犯了一些錯誤。或者有沒有其他更適當的方式來編寫文件進行過濾?我會非常感謝你的幫助。
是否使用任何其他語言來調用這些模板? –
不...我只使用xslt ...然後我有一個XML文件,其中有兩個元素一個「過濾器」第二個「用戶」...用戶有一些數據元素,如名稱,dob等,我想這個過濾元素使用此樣式表或任何其他適當的過濾來自用戶元素的數據 – ashamim
您忘記提供源XML文檔。請編輯問題並提供這些重要信息。 –