如何使用XSLT从XML Schema中提取元素名称?

时间:2016-09-16 14:56:53

标签: xml xslt xsd xml-parsing

这是一个示例代码段,显示了元素的架构定义的格式:

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

如您所见,有两个包含多个子元素的父元素(xml_details和data_details)。我的问题是如何使用XSLT只获取子元素名称(叶子节点)?输出看起来像这样:

            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

1 个答案:

答案 0 :(得分:0)

如果您使用XPath表达式//xs:element[not(.//xs:element)]/@name,您将获得所需的结果。