我看到这个异常消息来自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片段?我在样式表中遗漏了什么吗?
答案 0 :(得分:7)
异常是试图告诉您已尝试在根元素的close元素之后输出文本。输出看起来正常的原因是异常阻止生成无效的XML。
原因很简单:您没有对文档根目录进行转换。因此,执行默认转换。这些将输出所有元素的文本内容作为文本节点。
添加
<xsl:template match="/">
<xsl:apply-templates select="/Root/Documents/PO/DROPSHIP"/>
</xsl:template>
答案 1 :(得分:0)
您的输出确实构成了格式良好的XML片段。换句话说,它看起来没问题,你的XSLT也是如此。
似乎错误消息试图告诉您以下内容:
应用此XSLT会生成一个根据DTD或Schema无效的文档,或者我用于验证输出的任何文档,而
conformanceLevel
告诉我抱怨输出无效。如果您不关心有效性,请将conformanceLevel
设置为较少的肛门。
请注意“格式良好”(符合条件的非验证xml解析器可以读取它)和“有效”之间的重要区别(该结构不遵循模式中指定的语法)。
另请注意,在XSLT中无法生成格式不正确的XML。