2017-12-23 34 views
1

나는 다음과 같은 XML이 : 내 XSLT에서이 작업을 할 때XPath로 빈 요소를 포함하는 상위 요소를 어떻게 선택합니까?

<parentelement> 
     <mytype></mytype> 
     <myvalue>xyz</myvalue> 
    </parentelement> 
    <parentelement> 
     <mytype /> 
     <myvalue>qwe</myvalue> 
    </parentelement> 
    <parentelement> 
     <myvalue>asdf</myvalue> 
    </parentelement> 

:

을 :

<xsl:template match="/rootelement/parentelement/mytype[not(text())]/.."/> 

이 실패

<rootelement> 
    <parentelement> 
     <mytype>123</mytype> 
     <myvalue>abc</myvalue> 
    </parentelement> 
    <parentelement> 
     <mytype></mytype> 
     <myvalue>xyz</myvalue> 
    </parentelement> 
    <parentelement> 
     <mytype /> 
     <myvalue>qwe</myvalue> 
    </parentelement> 
    <parentelement> 
     <myvalue>asdf</myvalue> 
    </parentelement> 
</rootelement> 

내가 선택하는 XPath를 사용하려면를

예기치 않은 패턴 현은 발견 ".."

내가이 때 : 그것은 실패

<xsl:template match="/rootelement/parentelement/mytype[not(text())]/parent::*"/> 

: 패턴

축이 아이가 있거나 원저작자를 표시하여야합니다

빈 mytype을 포함하는 상위 요소는 어떻게 선택합니까?

감사합니다.

답변

2

요소를 일치시키고 조건을 술어에 넣습니다.

<xsl:template match="/rootelement/parentelement[mytype[not(node())]]"/> 
+0

감사합니다! 조금만 확장하고 mytype이없는 부모를 선택할 수있는 간단한 방법이 있습니까 (전혀 제공되지 않음)? – user1809566

+0

'또는'표현식을 사용할 수 있습니다. 예 : –

+0

죄송합니다. 동시 답변으로, 제출시 게시물을 보지 못했습니다. ("xsl : template match ="/ rootelement/parentelement [not (mytype) 또는 mytype [not (node ​​())]] "/> . 그러나, 나는 그곳에 그냥 남겨 둘 것이다. –

1

"빈 mytype을 포함하는 상위 요소"라고 말합니다. 따라서 parentelement을 선택하고 조건은 mytype이어야하며 mytype은 비어 있어야합니다. "빈", 나는 당신이 텍스트 나 요소를 의미 없다고 가정, 그래서 node()는보다 더 낫다입니다 :

/rootelement/parentelement[mytype[not(node())]]