我在使用XElement
和的组合时遇到了一些麻烦XslCompiledTransform
。我把我正在使用的示例代码放在下面。如果我使用该GetXmlDocumentXml()
方法获取输入 XML,它工作正常。如果我改用该方法,则在调用以下方法时GetXElementXml()
会得到一个:InvalidOperationException
Transform
XslComiledTransform
处于 Start 状态的标记文本将导致无效的 XML 文档。如果要编写 XML 片段,请确保将 ConformanceLevel 设置设置为 ConformanceLevel.Fragment 或 ConformanceLevel.Auto。
两者上的CreateNavigator
方法XElement
并XmlDocument
返回一个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();
}