.net – “状态EndRootElement中的令牌文本将导致无效的XML文档”

我看到这个异常消息来自xslcompiledtransform.Transform(),但在处理异常后,XSL转换似乎仍然成功.完整的异常消息是:

Token Text in state EndRootElement
would result in an invalid XML
document. Make sure that the
ConformanceLevel setting is set to
ConformanceLevel.Fragment or
ConformanceLevel.Auto if you want to
write an XML fragment.

样式表如下所示:

<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片段?我在样式表中遗漏了什么吗?

解决方法

例外是试图告诉您已尝试在根元素的close元素之后输出文本.输出看起来正常的原因是该异常阻止了生成无效的XML.

原因很简单:您没有对文档根目录进行转换.因此,执行认转换.这些将输出所有元素的文本内容作为文本节点.

<xsl:template match="/">
    <xsl:apply-templates select="/Root/Documents/PO/DROPSHIP"/>
</xsl:template>

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念