실제 XML 구조는 다음과 같아야합니다 (아니요, 변경할 수 없음). 어떤 시점에서 우리가 필요, 우리는 각각의 반환 XML 노드 목록에 detailrecord 반환 핸들 그런XML 마스터 및 세부 정보가 XML 내부의 개별 데이터 세트 인 경우
detailnodes = doc.documentElement.getElementsByTagName('/root/detail')
:
<root>
<master>
<record>
<ID>1</ID>
<Value>One</Value>
</record>
<record>
<ID>2</ID>
<Value>Two</Value>
</record>
</master>
<detail>
<record>
<ID>A</ID>
<MasterID>1</MasterID>
<Value>Somevalue a</Value>
</record>
<record>
<ID>B</ID>
<MasterID>2</MasterID>
<Value>Somevalue b</Value>
</record>
<record>
<ID>C</ID>
<MasterID>1</MasterID>
<Value>Somevalue c</Value>
</record>
<record>
<ID>D</ID>
<Value>Somevalue d</Value>
</record>
</detail>
</root>
먼저 우리는 가능한 상세 기록의 목록을 반환하는 XML에 XPath 쿼리를 수행 값은 XPath 표현식만을 사용하는 detailnode의 MasterID를 기반으로 마스터 레코드의 값입니다. 우리는 (선호하는 방법
for each detailnode in detailnodes do
masterID = detailnode.ChildNodes['MasterID'].value
masterValue = detailnode.selectNodes('../master[ID=" + MasterID + "]/Value')[0].value
end
예 (이 마음에 들지) 현재 레코드의 MasterID를 retreive하는 응용 프로그램 코드를 사용하고 입수해온 값
예에 따라 XPath 식을 만들지 않으)
for each detailnode in detailnodes do
masterValue = detailnode.selectNodes('../master[ID=?MasterID?]/Value')[0].value
end
는 XPath 식 내부 ?MasterID?
현재 detailnode MasterID의 값을 반환한다.
순수한 XPath 표현식을 사용해도 가능합니까?
편집 참고 : 난 당신이 현재 범위의 데이터에 의해 키가 다른 곳은 XML 문서에서 값을 조회 할 수 있어야 ... MSXML DOM을 사용하여이 작업을 얻을 수
나는'value'를 작은'v'로 씁니다. 그러나 XML은 대문자가됩니다. 이것은 "오류"를 찾기가 어려울 수도 있습니다 – Shnugo
OK, 데모를 업데이트합니다 (실제 구조는 훨씬 복잡합니다. 문제를 설명하기위한 것일뿐입니다) –