2010-06-08 5 views
4

샘플 XML은 :Xpath> 노드의 속성과 내용을 기반으로 노드를 선택할 수 있습니까?

<assignments> 
<assignment id="911990211" section-id="1942268885" item-count="21" sources="foo"> 
    <options> 
     <value name="NumRetakes">4</value> 
     <value name="MultipleResultGrading">6</value> 
     <value name="MaxFeedbackAttempts">-1</value> 
     <value name="ItemTakesBeforeHint">1</value> 
     <value name="TimeAllowed">0</value> 
    </options> 
</assignment> 
<assignment id="1425185257" section-id="1505958877" item-count="4" sources="bar"> 
    <options> 
     <value name="NumRetakes">0</value> 
     <value name="MultipleResultGrading">6</value> 
     <value name="MaxFeedbackAttempts">3</value> 
     <value name="ItemTakesBeforeHint">1</value> 
     <value name="TimeAllowed">0</value> 
    </options> 
</assignment> 
<assignments> 

XPath를 사용하여, 나는 노드 "name"속성이 "MaxFeedbackAttempts"와 노드의 내용은 "-1"모든 할당/할당/옵션/값 노드를 선택하고 싶습니다.

<value name="MaxFeedbackAttempts">-1</value> 

내가 지정된 속성 각각 할당/할당/옵션/값 노드를 사용하여 얻을 수 있습니다 :

//assignment/options/value[@name="MaxFeedbackAttempts"] 

난 그냥 나는 그게 내가 보이는 각 노드를 반환하려면, 말을하는 것입니다 이 경로를 세분화하여 노드 내용에 따라 결과를 제한하는 방법을 모릅니다. XPath를 사용하여이를 수행 할 수있는 방법이 있습니까?

+0

좋은 질문 (+1). 좀 더 작고 효율적인 솔루션에 대한 내 대답을보십시오. :) –

답변

3

사용 : 이름 @

/할당/할당/옵션/값 [= 'MaxFeedbackAttempts'및. = -1]

// 약어의 피할 수없는 시도는 매우 비효율적 일 수 있습니다.

+0

잘 알고 있습니다. 감사! –

+0

@ Andrew-Kirk : 여기서 유용한 것은 유용한 대답을 받아들이고 upvote하는 것입니다. 이 그림을 클릭하면 대답 옆에 체크 표시가 있어야합니다. :) –

+0

답변을 수락하는 과정을 지적 해 주셔서 감사합니다. 나쁘다, 나는 게시 지침을 읽었어야했다. .. 지금, 나는 upvote와 대답에 대한 명성이 없다. 그러나 여기에서는 +1이있다. :-) –

3

여러에게 [...] 제약을 사용하고 아마 할 수있는이 같은 XPath 쿼리 :

//assignment/options/value[@name="MaxFeedbackAttempts"][text()="-1"]
+0

'value()'를'text()'또는'.'로 변경하면 해결책이 유효한 답이 될 것입니다. –

+0

@Mads : 나는 시험을해야한다는 것을 알았다! 고정 ... –

5
//assignment/options/value[@name="MaxFeedbackAttempts" and text()="-1"] 
+0

멋진. 정확히 내가 무엇을 찾고 있었는지. 감사! –

관련 문제