2014-03-25 4 views
1

구조가 같지 않고 다를 수도있는 이와 같은 많은 xml 파일이 있습니다.경로 및 연산자 및 와일드 카드 검색

<ratings> 
    <rating> 
    <agency>SP</agency> 
    <provider>SP</provider> 
    <type>LONG TERM</type> 
    <currencyType>LOCAL</currencyType> 
    <description>SP Standard LT LC rating</description> 
    <crating by = "Moodys"> 
     <code>BBB+</code> 
    </crating> 
    <crating by = "S&P"> 
     <code>AAA-</code> 
    </crating> 
    <date>2011-09-07</date> 
    </rating> 
</ratings> 

나는 XML 구조가을 다르므로 내가 와일드 카드에 의지해야하고 요소 이름 아이디어에 의존 할 수 BBB +와 ​​AAA- 의 텍스트가 모든 XML 문서를 찾을 싶습니다 내가 어떻게하면 좋을까.

내 시도는하지만 난이 (가) "와"작동 사용하지 않는 경우는

//*[. = "BBB+" and . = "AAA-"] 

작동 나던하지만 내 기준을 충족하지 않을 것입니다.

+0

사용 | 대신에 – Fireworks

답변

1

당신은이 방법을 시도 할 수 있습니다 : 그렇지 않으면 "BBB +와 ​​AAA-의 텍스트", 반환 아무것도/널 (null)이있는 경우 요소를 반환합니다

/*[//*[normalize-space(text()) = 'AAA-'] and //*[normalize-space(text()) = 'BBB+']] 

. 이 외에도 @Robin의 답을 확인하십시오. 설명과 좋은 조언을 고려해야합니다.

1

편집이 실제로 응답의 경우는 하나의 기준을 원 만난 즉

사용할 수있는 텍스트 'AAA-'또는 'BBB +'로 적어도 하나 개의 노드가있다

//*[normalize-space(text()) = 'AAA-' or normalize-space(text()) = 'BBB+'] 

텍스트가있는 노드를 반환합니다. text() 속성에 조건을 직접 넣을 수 있으며 normalize-space 함수는 후행 공백의 텍스트를 잘라냅니다.

모든 노드를 검사해야하므로 분명히 느립니다. *code으로 변경할 수 있으면 성능이 크게 향상됩니다.

+0

두 조건이 충족되면 결과를 얻고 싶습니다. 내가 'BBB +'를 다른 것으로 변경하더라도 귀하가 원하는 경우가 아닌 결과를 얻습니다. 명확하지 않은 경우 에이프릴 –

+0

오, 미안해. @ har07의 대답은 아마도 당신이하고 싶은 것과 더 가깝습니다! 그에 따라 내 "답변"을 업데이트하겠습니다. – Robin