我的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中包含了它们的命名空间,但我仍然收到错误。
答案 0 :(得分:14)
我收到错误“状态启动时令牌文本会导致错误 XML文档无效。确保ConformanceLevel设置为 如果需要,设置为ConformanceLevel.Fragment或ConformanceLevel.Auto 写一个XML片段。“我明白问题在于i:nil xml中的属性。虽然我包含了它们的命名空间 XSLT仍然是我收到错误。
否。问题是结果不是一个结构良好的XML文档,因此XmlWriter
涉及将结果树的最终序列化生成为文本,引发了这个异常。
实际上,在您的搜索结果中,您有两个Root
个元素,而且没有一个元素具有父元素。
您需要生成格式正确的文档,或将XmlWriter
的 ConformanceLevel 设置更改为ConformanceLevel.Fragment
或ConformanceLevel.Auto
。< / p>
要创建格式正确的输出,只需添加:
<xsl:template match="/">
<top>
<xsl:apply-templates/>
</top>
</xsl:template>