2012-07-19 3 views
3

구현 된 유형의 요소 이름이 xs : simpleType 인 순차의 모든 하위 요소를 선택하려고합니다.XPATH 유형 요소 이름이 xs : simpleType 인 하위 요소를 선택하십시오.

<xs:complexType name="Truck"> 
    <xs:complexContent> 
     <xs:extension base="Car"> 
      <xs:sequence> 
       <xs:element name="DriverName" type="Name"> 
        ... 
       </xs:element> 
       <xs:element name="Engine" type="TruckEngine"> 
        ...     
       </xs:element> 
      </xs:sequence> 
     </xs:extension> 
    </xs:complexContent> 
</xs:complexType> 

는 어디 유형 "이름"과 같이 보인다 :

<xs:simpleType name="Name"> 
    ... 
</xs:simpleType> 

와 "TruckEngine"는 다음과 같습니다

<xs:complexType name="TruckEngine"> 
    ... 
</xs:complexType> 

어떻게 내가 XPATH 요소를 DriverName을 선택을 만들 것인가? 지금까지 xs : complexType/xs : complexContent/xs : extension/xs : sequence/xs : element와 같은 것을 가지고 있지만, 더 이상 내 선택을 향상시키는 방법을 모르겠습니다. 이와 같은 것을 선택하기 위해 어떤 용어를 사용해야할지 모르겠으므로 관련 정보를 검색하는 데 정말 어려움을 겪었습니다. 내 예를 좀 더 일반적인 것으로 수정했습니다.

답변

2

당신은 사용할 수 있습니다

//xs:element[@type = //xs:simpleType/@name] 

내가 //을 사용하는 대신 더 명시 적 경로를 권하고 싶습니다 있지만.

(편집 : =eq 변경) 스키마 작성자에 의해 사용되는 규칙을 알고하지 않는

+0

아직 내 질문에 대답 할 수 없지만 올바른 방향으로 우리를 밀어 넣었습니다. 나는 그것을 다음과 같이 수정했다 : xs : element [contains (@type, // xs : simpleType/@ name)] – kurtzbot

+0

포함하는 이유는 // xs : simpleType이 모든 simpleType을 문서의 루트이므로 직접 비교할 수 없습니다. 일치하는 요소 목록을 검색 한 다음 해당 요소의 유형과 이름을 비교합니다. – kurtzbot

+0

@kurtzbot -'eq' 대신'='을 사용해 보셨습니까? (하나 이상의'xs : simpleType'을 편집했습니다.) 다행 이네. –

3

스키마 문서에서 정보를 추출하는 시도는 (거의 불가능) 어렵습니다. 예를 들어, DevNull (사용자가 동의 함)의 솔루션은 유형이 동일한 스키마 문서에 정의되어 있고 이름이 지정된 (익명이 아닌) 유형에 대해서만 작동하며 targetNamespace가없는 스키마 문서에서만 작동합니다 .

저작 규칙과 상관없이 모든 스키마에서 작동하는 더 일반적인 솔루션의 경우 스키마로 분석 한 후 "조리 된"스키마 구성 요소에 대한 액세스를 제공하는 스키마 API를 사용하십시오. 프로세서. 하나의 접근법은 Java API를 스키마 구성 요소에 제공하는 Xerces를 사용하는 것이고 다른 하나는 Saxon의 SCM 형식을 사용하여 하나의 문서에서 "조리 된"스키마 구성 요소의 XML 표현을 제공하는 것입니다.

+0

아주 좋은 요점과 대안. +1 –

관련 문제