2016-09-16 6 views
0

Dies ist ein Beispiel-Snippet, das Format der Schema-Definition für Elemente zeigt:Wie extrahiere ich Elementnamen aus einem XML-Schema mit XSLT?

  <?xml version="1.0" encoding="UTF-8"?> 
      <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="2.1"> 
      <xs:include schemaLocation="enumerations_schema.xsd"/> 
      <xs:element name="xml_details" minOccurs="0"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element name="xml_element_1" minOccurs="0"/> 
         <xs:element name="xml_element_3" type="xs:string" minOccurs="0"/> 
         <xs:element name="xml_element_4" type="xs:decimal" minOccurs="0"/> 
        </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
      <xs:element name="data_details" minOccurs="0"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element name="data_element_1" minOccurs="0"> 
          <xs:annotation> 
           <xs:documentation>Lorem ipsum</xs:documentation> 
          </xs:annotation> 
          <xs:complexType> 
           <xs:simpleContent> 
            <xs:extension base="xs:decimal"> 
             <xs:attribute name="date" type="xs:date"/> 
             <xs:attribute name="as_of_date" type="xs:date"/> 
            </xs:extension> 
           </xs:simpleContent> 
          </xs:complexType> 
         </xs:element> 
         <xs:element name="data_element_2" type="xs:decimal" minOccurs="0"> 
          <xs:annotation> 
           <xs:documentation>Lorem ipsum</xs:documentation> 
          </xs:annotation> 
         </xs:element> 
         <xs:element name="data_element_3" type="xs:decimal" minOccurs="0"/> 
         <xs:element name="data_element_4" minOccurs="0"> 
          <xs:complexType> 
           <xs:simpleContent> 
            <xs:extension base="Enumeration_1"> 
             <xs:attribute name="type" type="xs:string"/> 
            </xs:extension> 
           </xs:simpleContent> 
          </xs:complexType> 
         </xs:element> 
         <xs:element name="data_element_5" type="xs:string" minOccurs="0"/> 
         <xs:element name="data_element_6" type="xs:decimal" minOccurs="0"/> 
        </xs:sequence> 
       </xs:complexType> 
      </xs:element> 

Wie Sie sehen können, gibt es zwei übergeordnete Elemente (xml_details und data_details) mit mehreren Kindern. Meine Frage ist, wie man mit XSLT nur die Child-Elementnamen (Blattknoten) holt. Die Ausgabe wird in etwa wie folgt aussehen:

  xml_element_1 
      xml_element_3 
      xml_element_4 
      data_element_1 
      data_element_2 
      data_element_3 
      data_element_4 
      data_element_5 
      data_element_6 

Antwort

0

Wenn Sie den XPath-Ausdruck verwenden //xs:element[not(.//xs:element)]/@name Sie das Ergebnis Sie suchen zu bekommen.

+0

Mögen Sie dies bedeuten ?: \t Fenil

+0

Zumindest mit XSLT 2.0 würde ich buchstäblich ''. Aber offensichtlich gibt es viele Möglichkeiten, mit XSLT zu arbeiten, wenn Sie Templates verwenden wollen dann ' 'ist eins (das führende' // 'wird in einem Matchmuster nicht benötigt). –

+0

Danke, dass XPath auf xpathfiddle.net funktioniert, aber wenn ich in XML Spy oder einem anderen XML-Umgebungseditor öffne, wird folgender Fehler ausgegeben: Fehler im XPath-Ausdruck Undefiniertes Namespacepräfix - 'xs' match = "xs: element [ nicht (.// xs: element)] " – Fenil

Verwandte Themen