나는이 같은 구조를 가지고있다.XPath는 조건과 조건에 루트 아래에 검색 루트는
나는 기본적으로 어쩌면 넣을 수있는 더 좋은 방법을 "나에게라는 이름의 노드를 제공 배제하지 않는다"거나, 말을이 뭔가를 추가 할 내 XPath 쿼리
//*[not(name()='error') and jcr:contains(*, 'searchInput')]
을 위해 지금까지 구조 "exclude라는 이름의 노드를 검색에서 제외"합니다. 처음에 사용 된 경로를 사용하여 // 할 수 있는지 잘 모르겠습니다. 다른 방법으로 필터링하는 것입니다. 나는 루트 (root) 아래의 한 레벨 만보고 그 레벨의 노드만을 제외하기 때문에 나는 (name() = 'exclude')라고 말할 수 없다는 것을 안다.
아래 1 단계 더 검색하고 특정 노드를 이름으로 제외하거나 전체 문서에서 모든 것을 검색하고 특정 이름의 노드를 제외 할 수있는 방법이 있습니까?
중요한 것은 확실하지 않지만 CMS Magnolia에서 사이트 검색을 시도하고 있습니다. 나는 jcr sql2를 사용하여 한계에 부딪쳤다. 그리고 지금까지 이것을 연구하면서 발견 한 것을 내가 할 수 없다.
편집 : 답변과 의견을 바탕으로
가, 여기에 내가 지금보고있는 무슨이다 :
//*[not(@sv:name='exclude' or @sv:name='error') and jcr:contains(*, 'searchInput)]
나는 여전히이 '제외'받고있는 것으로 보인다 결과 내가해야 하나하지 'sv :'를 올바르게 등록했거나 검색 결과의 일부를 제외시키는 데 필요한 쿼리에 뭔가 빠졌습니다. exclude
라는 이름의 노드 (요소)를 self
을 통해 선택할 수 있습니다
'name()'을 사용하지만'@ name'을 실제로 사용할 수 있습니까? – Tomalak
방금 확인했는데 어느 쪽이 효과가있는 것으로 보입니다. 아마 @name은 더 잘 수행하지만 나는 손을 알지 못할 것입니다. – wondergoat77
그들은 다른 것들입니다. 'name()'은 현재 사용중인 노드의 이름을 알려줍니다. 'exclude'라는 노드가 없습니다. 하지만 당신은'name'이라는 이름의 * 속성을 가진 노드와'exclude '라는 이름의 노드를'b'라고 부릅니다. 그리고 속성은'@ '로 얻을 수 있습니다. – Tomalak