不能从已经加载的输入文档中删除空白.将输入文档作为XmlReader提供

本文关键字:输入 文档 空白 提供 XmlReader 删除 加载 不能 | 更新日期: 2023-09-27 18:05:11

我想转换一个XML文档,但是遇到一个问题。

我的XSLT看起来像这样:

<?xml version="1.0" encoding="iso-8859-1" ?> 
<xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" /> 
    <xsl:strip-space elements="*" /> 
    <xsl:template match="/">
        <xsl:apply-templates select="address" /> 
    </xsl:template>
    <xsl:template match="address">
        <xsl:value-of select="@street" /> 
        <xsl:value-of select="@housenr" /> 
        <xsl:value-of select="@zipcode" /> 
        <xsl:value-of select="@city" /> 
        <xsl:value-of select="@country" /> 
    </xsl:template>
</xsl:stylesheet>

我要转换的XML文档看起来像这样:

<address id="4" type="1" 
    typename="Postadres" 
    street="pak street" 
    housenr="420" 
    zipcode="42000" 
    city="Nill" 
    country="Lahore" 
    kix="" /> 
下面是我写的代码:
public static string Transform(XmlDocument doc, XmlDocument stylesheet)
{
    var transform = new System.Xml.Xsl.XslCompiledTransform();
    XmlDocument domOutput = new XmlDocument();
    stylesheet.PreserveWhitespace = false;
    transform.Load(stylesheet);    // compiled stylesheet
    MemoryStream oStream = new MemoryStream();
    var writer = new System.IO.StringWriter();
    transform.Transform(doc, (XsltArgumentList)null, oStream);
    domOutput.Load(oStream);
    return writer.ToString();
}

下一行抛出异常

transform.Transform(doc, (XsltArgumentList)null, oStream);

异常信息:

不能从已经加载的输入文档中删除空白。将输入文档作为XmlReader提供。

你能告诉我我做错了什么吗?

提前感谢!

不能从已经加载的输入文档中删除空白.将输入文档作为XmlReader提供

我解决了。实际上"XslCompiledTransform。转换"将XmlReader作为第一个参数,并且在第一个参数中传递XmlDocument。代码如下:

public static string Transform(XmlDocument doc, XmlDocument stylesheet)
    {
        try
        {
            System.Xml.Xsl.XslCompiledTransform transform = new System.Xml.Xsl.XslCompiledTransform();
            transform.Load(stylesheet); // compiled stylesheet
            System.IO.StringWriter writer = new System.IO.StringWriter();
            XmlReader xmlReadB = new XmlTextReader(new StringReader(doc.DocumentElement.OuterXml));
            transform.Transform(xmlReadB, null, writer);
            return writer.ToString();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }