我在使用
XElement
和
XslCompiledTransform
. 我将使用的示例代码放在下面。如果我使用
GetXmlDocumentXml()
方法,它工作得很好。如果我使用
GetXElementXml()
相反,我得到一个
InvalidOperationException
当呼叫
Transform
方法
XslComiledTransform
:
状态start中的令牌文本将导致无效的XML文档。如果要写入XML片段,请确保ConforceLevel设置设置为ConforceLevel.Fragment或ConforceLevel.Auto。
.
这个
CreateNavigator
两种方法
X元素
和
XmlDocument
返回一个
XPathNavigator
. 额外的东西是什么
XML文档
这样做都是可行的,我怎样才能做到这一点呢?
X元素
?我只是在做些疯狂的事吗?
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();
}