【发布时间】:2010-06-08 14:48:42
【问题描述】:
我在使用 XElement 和 XslCompiledTransform 的组合时遇到了一些问题。我把我正在使用的示例代码放在下面。如果我使用 GetXmlDocumentXml() 方法获取输入 XML,它工作正常。如果我改用GetXElementXml() 方法,则在调用XslComiledTransform 的Transform 方法时会得到InvalidOperationException:
处于 Start 状态的标记文本会导致 XML 文档无效。如果要编写 XML 片段,请确保 ConformanceLevel 设置设置为 ConformanceLevel.Fragment 或 ConformanceLevel.Auto。
XElement 和 XmlDocument 上的 CreateNavigator 方法返回一个 XPathNavigator。 XmlDocument 有什么额外的东西,这一切都有效,我怎样才能对 XElement 做同样的事情?我只是在做一些疯狂的事情吗?
static void Main(string[] args)
{
XslCompiledTransform stylesheet = GetStylesheet(); // not shown for brevity
IXPathNavigable input = this.GetXElementXml();
using (MemoryStream ms = this.TransformXml(input, stylesheet))
{
XmlReader xr = XmlReader.Create(ms);
xr.MoveToContent();
}
}
private MemoryStream TransformXml(
IXPathNavigable xml,
XslCompiledTransform stylesheet)
{
MemoryStream transformed = new MemoryStream();
XmlWriter writer = XmlWriter.Create(transformed);
stylesheet.Transform(xml, null, writer);
transformed.Position = 0;
return transformed;
}
private IXPathNavigable GetXElementXml()
{
var xml = new XElement("x", new XElement("y", "sds"));
return xml.CreateNavigator();
}
private IXPathNavigable GetXmlDocumentXml()
{
var xml = new XmlDocument();
xml.LoadXml("<x><y>sds</y></x>");
return xml.CreateNavigator();
}
【问题讨论】:
标签: c# .net xmldocument xelement xslcompiledtransform