Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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
Xml XSLT检查是否有一个同级元素包含某些参数_Xml_Xslt_Properties_Filter - Fatal编程技术网

Xml XSLT检查是否有一个同级元素包含某些参数

Xml XSLT检查是否有一个同级元素包含某些参数,xml,xslt,properties,filter,Xml,Xslt,Properties,Filter,我有列出菜单项的XML。问题是,它列出了所有项目,而不考虑它们的语言,我需要过滤掉所有不属于当前语言的项目,这些语言存储在$language变量中 这是我的XSLT,它应该过滤掉不属于当前语言的菜单项,还应该过滤隐藏项: 目前,只有大约一个元素通过了,这可能是因为我的主项除了en之外还有索引 那个么,若元素中并没有包含当前语言的正确类型,而忽略了其他属性,那个么如何过滤掉它呢 这是我的XML: <navigation> <page handle="en" id="1"&

我有列出菜单项的XML。问题是,它列出了所有项目,而不考虑它们的语言,我需要过滤掉所有不属于当前语言的项目,这些语言存储在$language变量中

这是我的XSLT,它应该过滤掉不属于当前语言的菜单项,还应该过滤隐藏项:

目前,只有大约一个元素通过了,这可能是因为我的主项除了en之外还有索引

那个么,若元素中并没有包含当前语言的正确类型,而忽略了其他属性,那个么如何过滤掉它呢

这是我的XML:

<navigation>
    <page handle="en" id="1">
        <name>Home</name>
        <types>
            <type>en</type>
            <type>index</type>
        </types>
    </page>
    <page handle="he" id="2">
        <name>Home HE</name>
        <types>
            <type>he</type>
        </types>
    </page>
    <page handle="about" id="3">
        <name>About</name>
        <types>
            <type>en</type>
        </types>
    </page>
</navigation>

要比较元素值,请使用文本

<xsl:apply-templates select="page[not(types/type/text() = 'hidden' or types/type/text() != $language)]"/>

您的问题在于not函数,它不能以您尝试使用它的方式工作。not获取数字、字符串或节点集,应用布尔函数,然后返回逆函数。not显然不会反转布尔表达式。看

通过将逆运算符分布到操作数中并使用and,可以实现所需的操作:

<xsl:apply-templates select="page[types/type != 'hidden' and types/type = $language]" />

这会产生与.NET4.5中OP的XPATH查询相同的错误结果。