XSLT: определенный элемент всегда добавляется в root? - PullRequest
0 голосов
/ 10 июля 2009

У меня есть ситуация, когда определенные элементы (xs: simpleType, xs: complexType) помещаются в вывод при их обнаружении:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="HighSchoolType">
    <xs:sequence>
        <xs:element name="OrganizationName" type="core:OrganizationNameType"/>
        <xs:element name="OPEID" type="core:OPEIDType"/>
        <xs:simpleType name="OPEIDType"/>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="OrganizationNameType"/>
</xs:schema>

Я бы предпочел, чтобы xs: simpleType всегда был присоединен к корню, независимо от того, где шаблон встречается в источнике. IE:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="HighSchoolType">
    <xs:sequence>
        <xs:element name="OrganizationName" type="core:OrganizationNameType"/>
        <xs:element name="OPEID" type="core:OPEIDType"/>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="OrganizationNameType"/>
  <xs:simpleType name="OPEIDType"/>
</xs:schema>

Можно ли также останавливать дубликаты на этом этапе?

Вот шаблон, который я сейчас использую:

<xsl:template match="xs:simpleType">
    <xsl:copy>
        <xsl:copy-of select="*[not(self::xs:annotation or self::xs:restriction)]|@*"/>
    </xsl:copy>
</xsl:template>

1 Ответ

1 голос
/ 10 июля 2009

Примерно так должно работать:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xsl:template match="/xs:schema">
        <xsl:copy>
            <xsl:apply-templates/>
            <xsl:copy-of select="//xs:simpleType"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="*[name()!='xs:simpleType' and name()!='xs:schema']">
        <xsl:copy>
            <xsl:apply-templates select="*|@*"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="@*">
        <xsl:copy-of select="."/>
    </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...