2017-12-28 15 views
0

Zum Beispiel: Mein xsd ist:Wie verwende ich xpath um Elemente nach xsd Typ im Instanzdokument auszuwählen?

<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> 

Mein Instanzdokument ist:

<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 verwenden, um alle Elemente, deren komplexen Typ zu wählen ist Tier? Kann xpath xsd Metainformationen verwenden?

Antwort

2

Mit einem schemafähigen Prozessor (wie Saxon 9 EE oder Altova XMLSpy/Raptor) Sie verwenden können //element(*, Animal) (https://www.w3.org/TR/xpath-31/#doc-xpath31-ElementTest) alle Elemente mit dieser Art Animal zu wählen, ein Stylesheet würde aussehen wie

<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

Es funktioniert , Vielen Dank. – chansey

+0

Es funktioniert auf Sauerstoff Xml-Editor, die XPath-Builder wählen XPath 3.0SA, aber Ihre Xslt zurückgeben leer. – chansey

+0

Stellen Sie sicher, dass Sie das Transformationsszenario für die Verwendung von Saxon-EE konfigurieren und die schemabasierte Validierung aktivieren. –

Verwandte Themen