2017-12-28 62 views
0

: 내 XSD는 다음과 같습니다xpath를 사용하여 인스턴스 문서에서 xsd 유형별 요소를 선택하는 방법은 무엇입니까? 예를 들어

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 
    <xs:element name="Zoo"> 
     <xs:complexType> 
      <xs:sequence maxOccurs="unbounded"> 
       <xs:element ref="Animal"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element abstract="true" name="Animal"/> 
    <xs:element name="Tiger" substitutionGroup="Animal" type="Tiger"/> 
    <xs:element name="Wolf" substitutionGroup="Animal" type="Wolf"/> 
    <xs:complexType name="Animal"> 
     <xs:attribute name="name"/> 
    </xs:complexType> 
    <xs:complexType name="Tiger"> 
     <xs:complexContent> 
      <xs:extension base="Animal"/> 
     </xs:complexContent> 
    </xs:complexType> 
    <xs:complexType name="Wolf"> 
     <xs:complexContent> 
      <xs:extension base="Animal"/> 
     </xs:complexContent> 
    </xs:complexType> 
</xs:schema> 

내 인스턴스 문서는 다음과 같습니다

<Zoo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Zoo.xsd"> 
    <Tiger name="001"/> 
    <Wolf name="002"/> 
    <Wolf name="003"/> 
</Zoo> 

어떻게 그 복합 형 동물의 모든 요소를 ​​선택하는 XPath를 사용할 수 있나요? xpath가 xsd 메타 정보를 사용할 수 있습니까? 스키마 인식 프로세서와

답변

2

(색슨 9 EE 또는 Altova XMLSPY/랩터와 같은) 당신이 //element(*, Animal) (https://www.w3.org/TR/xpath-31/#doc-xpath31-ElementTest가) 해당 유형 Animal 모든 요소를 ​​선택하는 데 사용할 수있는, 스타일 시트는 의미가 있습니다

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:math="http://www.w3.org/2005/xpath-functions/math" 
    exclude-result-prefixes="xs math" 
    version="3.0"> 

    <xsl:import-schema schema-location="Zoo.xsd"/> 

    <xsl:template match="/"> 
     <xsl:copy-of select="//element(*, Animal)"/> 
    </xsl:template> 

</xsl:stylesheet> 
+0

과 같을 것이다 , 감사. – chansey

+0

xpath 빌더가 XPath 3.0SA를 선택하는 산소 xml 편집기에서 작동하지만 xslt가 비어있게됩니다. – chansey

+0

Saxon EE를 사용하고 스키마 기반 유효성 검증을 사용하도록 변환 시나리오를 구성했는지 확인하십시오. –