我有这样的结构:的Xpath - 用条件和以下条件根搜索根
<sv:a>
<sv:b sv:name="one"/>
<sv:b sv:name="two"/>
<sv:c sv:name="exclude"/>
<sv:b sv:name="error"/>
<sv:a>
我试图让所有的A和B的,但是从我的搜索中排除任何C的含量。
我有这样的结构,到目前为止我的XPath查询
//*[not(name()='error') and jcr:contains(*, 'searchInput')]
我想补充一点,以这实质上说,“不给我的名字命名的任何节点排除”或者一个更好的方式把它是“从搜索中排除名为exclude的任何节点”。我不确定我是否可以使用最初使用//的路径并仅以不同的方式进行过滤。我知道我不能仅仅说不(name ='exclude'),因为它只查看根以下的一个级别,只排除该级别的节点。
有没有办法在下面搜索1个以上的级别,并按他们的名字排除某些节点,或搜索整个文档中的所有内容并排除特定名称的节点?
林不知道它的问题,但我工作的CMS玉兰,并试图进行网站搜索。我在使用jcr sql2时遇到了一个限制,并且无法按照我在研究过程中发现的方式执行此操作。
编辑:
基于答案和评论,下面是我在看现在:
//*[not(@sv:name='exclude' or @sv:name='error') and jcr:contains(*, 'searchInput)]
我似乎仍然得到“排除”的结果,所以我必须要么不注册'sv:'正确或缺少查询中需要排除搜索结果的内容。
你使用'name()',但它可能是你实际上是'@ name'? – Tomalak 2014-09-03 16:08:49
我刚刚检查,似乎任何工作。可能@name的表现会更好,但我不会知道他们是 – wondergoat77 2014-09-03 16:10:40
他们是不同的东西。 'name()'给你手头节点的名字。您没有名为'exclude'的节点。但是你所拥有的是名为'b'的节点,它带有*属性*,名为'name',值为''exclude“'。你可以用'@'获得属性。 – Tomalak 2014-09-03 16:12:25