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