Пустой XML разделяет XML по умолчанию - PullRequest
2 голосов
/ 06 августа 2010

У меня есть XML, передаваемый в XSL, который дает стандартный вывод. Есть вероятность, что я получу XML как пустой несколько раз, основываясь на некоторых случаях. Есть ли способ, если у нас есть пустой XML и мы выпустили стандартный или стандартный код в XSL?

Ответы [ 4 ]

3 голосов
/ 06 августа 2010

Есть ли способ, если у нас есть пустой XML и мы выводим стандартный или стандартный вывод в XSL?

У вас никогда не будет "пустого XML".

По определению, правильно сформированный XML-документ должен иметь верхний элемент.Если преобразование XSLT 1.0 применяется к любому плохо сформированному документу XML, любой совместимый процессор XSLT 1.0 должен выдать ошибку, и никакая обработка не выполняется.

0 голосов
/ 07 августа 2010

С http://www.w3.org/TR/xpath-functions/#func-doc-available

Если fn: doc ($ uri) возвращает узел документа, эта функция возвращает true.Если $ uri не является допустимым xs: anyURI, возникает ошибка [err: FODC0005].В противном случае эта функция возвращает false.

И из http://www.w3.org/TR/xpath-functions/#func-doc

Одна из возможных моделей обработки для этой функции заключается в следующем.Ресурс, идентифицированный ссылкой URI, извлекается.Если ресурс не может быть получен, возникает ошибка [err: FODC0002].Данные, полученные в результате действия извлечения, затем анализируются как документ XML, и дерево строится в соответствии с [Модель данных XQuery 1.0 и XPath 2.0].Если тип носителя верхнего уровня известен и является «текстовым», содержимое анализируется так же, как если бы тип носителя был text / xml;в противном случае он анализируется так же, как если бы тип носителя был application / xml.Если содержимое не может быть успешно проанализировано, возникает ошибка [err: FODC0002].В противном случае, результатом функции является узел документа в корне результирующего дерева.Затем это дерево необязательно проверяется на соответствие схеме.

Итак, похоже, что вы могли бы сделать это (я осторожен из-за слов "Одна возможная модель обработки" ): Эта таблица стилей:

<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:param name="pURI" select="'B.xml'"/>
    <xsl:template match="/">
        <DefaultResult>
            <xsl:if test="doc-available($pURI)">
                <xsl:apply-templates select="doc($pURI)/*"/>
            </xsl:if>
        </DefaultResult>
    </xsl:template>
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

При любом вводе и B.xml пустой документ, саксонский вывод:

<DefaultResult/>

И эта альтернативная информация:

Error on line 1 column 1 of B.xml:
  SXXP0003: Error reported by XML parser: Premature end of file.

Альтова Выход:

<DefaultResult>
    <Entry type="Folder">
        <Name/>
        <Date/>
        <Info>
            <URI>B.xml</URI>
            <Comment/>
            <Files>0</Files>
            <CompressedSize>0</CompressedSize>
            <UncompressedSize>0</UncompressedSize>
            <Ratio>0</Ratio>
            <ContainsEncryptedFiles>false</ContainsEncryptedFiles>
        </Info>
    </Entry>
</DefaultResult>
0 голосов
/ 06 августа 2010

Если ваш корневой тег представляет собой пустой набор узлов, что-то должно работать следующим образом ...

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <xsl:choose> 
      <xsl:when test='*[not(*)]'> 
        Empty
      </xsl:when> 
      <xsl:otherwise> 
        Full 
      </xsl:otherwise> 
    </xsl:choose> 
  </xsl:template> 
</xsl:stylesheet>

... Если файл пуст (или, по крайней мере, не содержит корневого элемента), вашXSLT процессор скорее всего сгенерирует и исключение.

0 голосов
/ 06 августа 2010

Один из способов - проверить, существует ли корневой узел в XSL и, если нет, распечатать что-либо.

Но когда я попробовал tsimiliar thin в Perl, скрипт завис. Так что я думаю, что вы должны проверить размер и затем применить XSL

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