2013-11-27 2 views
1

다음과 같은 mock up XML이 있습니다. 다단계 ChildEntity 요소와 마지막에 Property 값이있는 트리입니다. 내가 속성/ValueID 텍스트를 도출 할 필요가 자식 엔티티에 제공되는 순서 (즉 부모 - 자식 관계)를 기반으로 다중 계층 형 XML에 Xpath 방식 사용

<Root> 
    <Family> 
     <Guardian name="James"> 
      <EntityID>123</EntityID> 
      <ChildEntity> 
       <Name>Rita</Name> 
       <ChildEntity> 
        <Name>Anna</Name> 
        <ChildEntity> 
         <Name>Tina</Name> 
         <ChildEntity> 
          <Name>Sally</Name> 
         <Property> 
          <ValueID>666</ValueID> 
         </Property> 
         </ChildEntity> 
        </ChildEntity> 
       </ChildEntity> 
      </ChildEntity> 
     </Guardian> 
     <Guardian name="Jake"> 
      <EntityID>234</EntityID> 
      <ChildEntity> 
       <Name>Anna</Name> 
       <ChildEntity> 
        <Name>Isabel</Name> 
        <ChildEntity> 
         <Name>Tina</Name> 
         <ChildEntity> 
          <Name>Rita</Name> 
         <Property> 
          <ValueID>777</ValueID> 
         </Property> 
         </ChildEntity> 
        </ChildEntity> 
       </ChildEntity> 
      </ChildEntity> 
     </Guardian> 
     <Guardian name="Richard"> 
      <EntityID>456</EntityID> 
      <ChildEntity> 
       <Name>Michelle</Name> 
       <ChildEntity> 
        <Name>Sally</Name> 
        <ChildEntity> 
         <Name>Tina</Name> 
         <ChildEntity> 
          <Name>Anna</Name> 
         <Property> 
          <ValueID>888</ValueID> 
         </Property> 
         </ChildEntity> 
        </ChildEntity> 
       </ChildEntity> 
      </ChildEntity> 
     </Guardian> 
    </Family> 
</Root> 

().

예를 들어 입력 시퀀스가 ​​(Anna, Tina) - Anna가 부모, Tina Child 인 경우 -이 시퀀스가있는 노드를 식별 한 다음 속성 값을 파생해야합니다. 위의 예에서 값 666이 예상됩니다.

입력 내용은 부모, 하위 부모, 하위 (즉, 3 개의 엔터티)가 될 수 있도록 동적입니다.

이러한 상황에서이 문제를 해결하기위한 최선의 방법은 무엇입니까?

내가 생각하고 방법은, STEP1 반복이다 : 나는 부모 엔티티로 시작하고이 법인에게 STEP2을 가지고 모든 노드를 얻을 : 나는

인가 아이 엔티티에게이 곳 1 단계에서 선택한 노드 확인 이것은 효율적인 접근 방식인가? 이것을 처리하는 다른 더 좋은 방법이 있습니까? 하나의 Xpath 쿼리로 입력의 동적 특성을 고려하여 원하는 결과를 얻을 수 있습니까?

귀하의 의견을 높이 평가합니다.

답변

0

변수 입력이 어렵다는 것은 어렵습니다. 그러나 일반적인 경우에 XPath는이 중 하나를 다음과 같이 표시됩니다

/ChildEntity[Name="$parent"]/ChildEntity[Name="$child"]/Property/ValueID/text() 
/ChildEntity[Name="$parent"]/ChildEntity[Name="$sub-parent"]/ChildEntity[Name="$child"]/Property/ValueID/text() 

불행하게도, XPath는 쿼리 언어이며, 그것은 자신의 쿼리를 만들 수 없습니다. 위의 일반적인 패턴을 살펴보면, 의사 코드에서 다음과 같이하고 싶을 것입니다 :

List input; //e.g. ['Anna','Tina'] -> '666' or ['Anna','Isabel','Tina'] -> '777' 
query = ""; 
for person in input { 
    query = query + "/ChildEntity[Name='{person}']"; //Assuming some string formatting 
} 
query = query + "/Property/ValueID/text()"; 
document.xpath(query);