我正在尝试编写一个可以帮助从另一个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文档。请编辑问题并提供这些重要信息。 –