无法从已加载的输入文档中去除空白.将输入文档作为 XmlReader 提供 [英] White space cannot be stripped from input documents that have already been loaded. Provide the input document as an XmlReader instead
问题描述
我想转换 XML 文档,但遇到问题.
I want to transform a XML document, but having a problem.
我的 XSLT 如下所示:
My XSLT looks like this:
<?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 文档如下所示:
And the XML document I want to transform looks like this:
<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 提供.
White space cannot be stripped from input documents that have already been loaded. Provide the input document as an XmlReader instead.
你能告诉我我做错了什么吗?
Can you tell me what I am doing wrong?
提前致谢!
推荐答案
我解决了.实际上XslCompiledTransform.Transform"将 XmlReader 作为第一个参数,我在第一个参数中传递 XmlDocument.这是代码.
I solved it. Actually "XslCompiledTransform.Transform" takes XmlReader as first Parameter and i was passing XmlDocument in First Paramenter. Here is the code.
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;
}
}
这篇关于无法从已加载的输入文档中去除空白.将输入文档作为 XmlReader 提供的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!