XSLT转换正在抛出错误

时间:2011-10-03 11:39:56

标签: xslt

我的xml如下,

<?xml version="1.0" encoding="utf-16" ?> 
 <AllResidentAndUnitInfo xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
 i:type="ResidentsByUnitInfo" xmlns="http://schemas.datacontract.org/2004/07/FSRSchema">
    <BillingAddresses>
      <BillingAddress>
        <billing_address1>Some address</billing_address1> 
        <billing_address2 /> 
        <billing_city>Gilbert</billing_city> 
        <billing_country i:nil="true"/> 
        <billing_dtmmodified>2010-12-08T01:37:41+05:30</billing_dtmmodified> 
        <billing_state>AZ</billing_state> 
        <billing_zipcode>23233</billing_zipcode>            
      </BillingAddress>
      <BillingAddress>
       <ResidentsByUnitInfoPropertyUnitBillingAddress>
        <billing_address1>Some address</billing_address1> 
        <billing_address2 /> 
        <billing_city>Gilbert</billing_city> 
        <billing_country i:nil="true"/> 
        <billing_dtmmodified>2010-12-08T01:37:41+05:30</billing_dtmmodified> 
        <billing_state>AZ</billing_state> 
        <billing_zipcode>23233</billing_zipcode> 
       </ResidentsByUnitInfoPropertyUnitBillingAddress>
      </BillingAddress>
      ....

</AllResidentAndUnitInfo>

我正在使用XslCompiledTransform在C#中转换为另一种xml格式,

<?xml version='1.0' ?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
   xmlns:msxsl='urn:schemas-microsoft-com:xslt'
   xmlns:i='http://www.w3.org/2001/XMLSchema-instance' exclude-result-prefixes='msxsl  
   i' version='1.0'>
<xsl:output method='xml' indent='yes'/>
<xsl:template match='/AllResidentAndUnitInfo/BillingAddresses/BillingAddress'>
    <Root>
      <Address1>..</Address2>   
              ...
    </Root>
</xsl:template>
  </xsl:stylesheet>

我收到错误“状态为Start的Token Text会导致XML文档无效。如果要编写XML片段,请确保将ConformanceLevel设置设置为ConformanceLevel.Fragment或ConformanceLevel.Auto。”我明白问题在于xml中的i:nil属性。虽然我在XSLT中包含了它们的命名空间,但我仍然收到错误。

1 个答案:

答案 0 :(得分:14)

  

我收到错误“状态启动时令牌文本会导致错误   XML文档无效。确保ConformanceLevel设置为   如果需要,设置为ConformanceLevel.Fragment或ConformanceLevel.Auto   写一个XML片段。“我明白问题在于i:nil   xml中的属性。虽然我包含了它们的命名空间   XSLT仍然是我收到错误。

否。问题是结果不是一个结构良好的XML文档,因此XmlWriter涉及将结果树的最终序列化生成为文本,引发了这个异常。

实际上,在您的搜索结果中,您有两个Root个元素,而且没有一个元素具有父元素。

您需要生成格式正确的文档,或将XmlWriter ConformanceLevel 设置更改为ConformanceLevel.FragmentConformanceLevel.Auto。< / p>

要创建格式正确的输出,只需添加

<xsl:template match="/">
 <top>
   <xsl:apply-templates/>
 </top>
</xsl:template>