XSLT: превратить <element></element> в <element /> - PullRequest
2 голосов
/ 09 июля 2009

Что мне нужно сделать для этого:

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

В настоящее время получается:

<xs:simpleType xmlns:core="urn:org:pesc:core:CoreMain:v1.4.0" name="SINIDType">


</xs:simpleType>

Я бы предпочел, чтобы это выглядело так:

<xs:simpleType name="SINIDType" />

Ответы [ 2 ]

3 голосов
/ 09 июля 2009

с этими пустыми строками, похоже, что ваш оператор выбора (правильно) выбирает ваши пробельные узлы и ваши элементы. попробуйте использовать

select="*[not(self::xs:annotation or self::xs:restriction)]|@*"

, который будет соответствовать только узлам элемента, а не текстовым узлам.

0 голосов
/ 09 июля 2009

Сериализатор отвечает за то, испускается ли пустой элемент как <abc></abc> или <abc/>, и они в точности эквивалентны. Некоторые сериализаторы не предоставляют никаких опций и всегда будут производить одно или другое.

Но, возможно, вы излучаете пробел между ними; в этом случае вам придется заменить xsl:copy на что-то другое, не включающее незначительный пробел, например, добавив or text() = '' к вашему предикату.

Что касается исключения объявления пространства имен xmlns:core, это зависит от вашего контекста. Он будет сгенерирован всегда, если есть элемент, который требует его внутри вашего типа, или если вы используете XSLT и не исключили пространство имен с атрибутом @exclude-result-prefixes в корневом элементе <xsl:stylesheet>. И даже в этом случае, в зависимости от вашей процессорной среды, сериализатор может «решить», что он хочет, чтобы это пространство имен выводилось без необходимости, поскольку оно входило в область действия во входных данных.

Также странно видеть <xsl:copy> ... <xsl:copy-of .../> ... </xsl:copy>. Вы действительно не должны обернуть copy-of внутри copy s. Просто сделай это copy-of.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...