Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 添加多个过滤器_Xslt - Fatal编程技术网

Xslt 添加多个过滤器

Xslt 添加多个过滤器,xslt,Xslt,正如我在这篇文章中提到的: 基本上,我想使用for循环对xml应用多个过滤器,这些过滤器是动态的,它们来自其他xml 像这样的事情: foreach(list/field[@ProgramCategory=$Country][not(contain(@Program,$State1][not(contain(@Program,$State2][not(contain(@Program,$State3][not(contain(@Program,$Staten]) [not(contains(@

正如我在这篇文章中提到的: 基本上,我想使用for循环对xml应用多个过滤器,这些过滤器是动态的,它们来自其他xml

像这样的事情:

foreach(list/field[@ProgramCategory=$Country][not(contain(@Program,$State1][not(contain(@Program,$State2][not(contain(@Program,$State3][not(contain(@Program,$Staten])
[not(contains(@Program,'Virginia'))][not(contains(@Program,'Texas'))][not(contains(@Program,'Florida'))]
问题是,对于其他xml循环,我可以获得n个状态

我无法使用Dimitre建议的文档功能,因此我考虑通过以下方式实现该功能:

 <xsl:variable name="allprograms">
    <xsl:for-each select="/list2/field2">

            <xsl:text disable-output-escaping="yes">[not(contains(@Program,'</xsl:text><xsl:value-of select="@ProgramID"></xsl:value-of><xsl:text disable-output-escaping="yes">'))]</xsl:text>
                                                            </xsl:for-each>
</xsl:variable> 
我想在下面的for循环中使用上面的这个值作为过滤器,我不知道如何实现

<xsl:for-each="list/field[not(contains(@Program,'Virginia'))][not(contains(@Program,'Texas'))][not(contains(@Program,'Florida'))]">
在此之前,我还有一个for循环来过滤美国

xsl:for-each="list/field $allprograms">
   <xsl:value-of select="@ows_ID" />
</xsl:for-each>
我希望我的答案是1082,1088

如果有任何混淆,我也可以在这里添加xml。

杰克

从上一个解决方案中,您只需添加以下内容:

 <xsl:param name="pFilteredStates"> 
  <state>Virginia</state> 
  <state>Texas</state> 
  <state>Florida</state> 
 </xsl:param> 
如果ext:前缀需要绑定到此名称空间,则这是EXSLT名称空间-如果您的XSLT处理器未实现EXSLT:节点集,则您需要找到它实现的xxx:节点集扩展,或者告诉我们什么是您的XSLT处理器,人们将提供以下信息:

"http://exslt.org/common"
因此,您的示例可能如下所示:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:ext="http://exslt.org/common" exclude-result-prefixes="ext">
我仍然建议转换的发起人传递$pFilteredStates参数-在这种情况下,您可以删除$vFiltered的定义,并用$pFilteredStates`替换对它的每个引用,并且转换应该正常工作

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:ext="http://exslt.org/common" exclude-result-prefixes="ext">