2012-09-14 2 views
1

안녕하세요 xpath를 사용하여 XML에서 정보를 추출하는 데 도움이 필요합니다.특수한 경우에 XPATH로 속성 값 추출

<st:Testprova id='abcd'> 
    .... 
</st> 

    or 

<st:Test1prova id='defg'> 
    .... 
</st> 

내가 XPath 표현식 것을 사용 :

"//*[contains(.,'prova')]/@ID" 

을하지만 작동하지 않습니다

나는 일반적인 keywork로 시작 하나 개의 태그의 속성 값을 추출하는 XPath는을 사용합니다. 너 나 좀 도와 줄 수있어 ??

답변

2

@id 대신 @ID을 사용하고 있습니다. 대/소문자를 구분합니다. 게다가 노드 이름을 검색하려면 name()을 사용해야합니다. 당신의 XML이 정확하지 않지만

이 XPath 식

//*[contains(name(),'prova')]/@id 

반환 abcddefg

, 그것은해야한다 :

<st:Testprova id='abcd'> 
    .... 
</st:Testprova> 
<st:Test1prova id='defg'> 
    .... 
</st:Test1prova> 
1

올바른 기능이 경우에 사용할 수있다 matches().

이 포함() 적 단어 PROVA을 포함

Testprova 
Prodprova 
UATprova 
provaTest 

및 다른 사람과 같은 노드 이름에 대해서도 true를 반환 할 수 있습니다.

그러나 노드 이름과 일치하는 패턴을 알고 있으면 matches() 함수가 원하는 노드를 정확하게 필터링합니다.

그래서 숫자가 두 단어 사이에 나타날 수 있습니다 가정하면,는 XPath는

//*[matches(name(), '^Test[0-9]?prova$')]//@ID 

다음 주처럼 쓸 수 있습니다 : 일치 기능이 Xpath2.0의 일부이며 Xpath1에서 작동하지 않습니다. 0