«Текст токена в состоянии EndRootElement приведет к неверному документу XML» - PullRequest
5 голосов
/ 16 октября 2008

Я вижу это сообщение об исключении, полученное от XslCompiledTransform.Transform (), но после обработки исключения преобразование XSL по-прежнему кажется успешным Полное сообщение об исключении:

Текст токена в состоянии EndRootElement приведет к неверному XML документ. Убедитесь, что Для параметра ConformanceLevel установлено значение ConformanceLevel.Fragment или ConformanceLevel.Auto, если вы хотите написать фрагмент XML.

Таблица стилей выглядит следующим образом:

<xsl:stylesheet version="1.0" xmlns:ext="ext:extensions" xmlns:f="http://schemas.foo.com/FOAMSchema">
  <xsl:template match="/Root/Documents/PO/DROPSHIP">
    <Transactions>
      <Transaction>
        <f:partnerTransmission>
          <transmission_id>
            <xsl:value-of select="ext:NewGUID()"/>
          </transmission_id>
          <partner_code>
            <xsl:value-of select="/Root/@PartnerCode"/>
          </partner_code>
          <control_nbr>
            <xsl:value-of select="@GS_CNTRL_NUM"/>
          </control_nbr>
          <creationTime>
            <xsl:value-of select="ext:ConvertToStandardDateTime(@DATE,@TIME,'ISO8601Basic')"/>
          </creationTime>
          <direction>I</direction>
          <messageCount>
            <xsl:value-of select="count(ORDERS/ORDER)"/>
          </messageCount>
          <syntax>XML</syntax>
          <format>BARBAZ</format>
          <deliveryMethod>FTP</deliveryMethod>
        </f:partnerTransmission>
      </Transaction>
    </Transactions>
  </xsl:template>
</xsl:stylesheet>

Сгенерированный XML выглядит так:

<Transactions xmlns="http://schemas.foo.com/IntegrationProfile" xmlns:ext="ext:extensions">
  <Transaction>
    <f:partnerTransmission xmlns:f="http://schemas.foo.com/FOAMSchema">
      <transmission_id>a5e0ec76-6c24-426b-9eb5-aef9c45d913f</transmission_id>
      <partner_code>VN000033</partner_code>
      <control_nbr>650</control_nbr>
      <creationTime>9/27/2008 12:51:00 AM</creationTime>
      <direction>I</direction>
      <messageCount>2</messageCount>
      <syntax>XML</syntax>
      <format>BARBAZ</format>
      <deliveryMethod>FTP</deliveryMethod>
    </f:partnerTransmission>
  </Transaction>
</Transactions>

Это то, что я получаю, когда ловлю и игнорирую исключение.

Мне не удалось найти способ установить ConformanceLevel (свойство доступно только для чтения), но в то же время я также не думаю, что здесь должна быть проблема.

Мой вывод представляет собой фрагмент XML? Я что-то упустил в таблице стилей?

Ответы [ 2 ]

7 голосов
/ 16 марта 2010

Исключением является попытка сообщить вам, что вы пытались вывести текст после элемента close корневого элемента. Причина, по которой ваш вывод выглядит нормально, в том, что исключение не позволило сгенерировать неверный XML.

Причина проста: у вас нет преобразования для корня документа. Поэтому выполняются преобразования по умолчанию. Они будут выводить текстовое содержимое всех элементов в виде текстовых узлов.

Добавить

<xsl:template match="/">
    <xsl:apply-templates select="/Root/Documents/PO/DROPSHIP"/>
</xsl:template>
0 голосов
/ 16 октября 2008

Ваш вывод представляет собой правильно сформированный фрагмент XML. Другими словами, все выглядит хорошо, как и ваш XSLT.

Кажется, что сообщение об ошибке пытается сказать вам следующее:

При применении этого XSLT создается документ, который недействителен в соответствии с DTD или схемой, или чем-то еще, что я использую для проверки вывода, и мой conformanceLevel говорит мне пожаловаться на неверный вывод. Если вас не интересует действительность, установите для моего conformanceLevel значение менее анальное.

Обратите внимание на важное различие между "правильно сформированным" (соответствующий не проверяющий синтаксический анализатор xml может его прочитать) и "допустимым" (структура не соответствует грамматике, указанной в схеме).

Также обратите внимание, что в XSLT невозможно создать вывод, который не является правильно сформированным XML.

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