我在使用XElement和XslCompiledTransform的组合时遇到了一些困难。我已经将我正在使用的示例代码放在下面。如果我使用GetXmlDocumentXml()方法获得我的输入XML,它就能正常工作。如果我使用GetXElementXml()方法,则在调用XslComiledTransform的Transform方法时会得到一个XslComiledTransform
状态启动中的令牌文本将导致无效的XML文档。如果要编写ConformanceLevel片段,请确保将ConformanceLevel.Fragment设置设置为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();
}发布于 2010-06-08 14:52:19
哦,那很简单。解决方案是将XElement封装在XDocument对象中。问题解决了!
https://stackoverflow.com/questions/2998428
复制相似问题