Xlement和XSLCompileDTransForm的问题
-
24-10-2019 - |
题
我使用的组合遇到了一些麻烦 XElement
和 XslCompiledTransform
. 。我已经放置了我在下面使用的示例代码。如果我使用输入XML GetXmlDocumentXml()
方法,它可以正常工作。如果我使用 GetXElementXml()
方法相反,我得到了一个 InvalidOperationException
打电话时 Transform
的方法 XslComiledTransform
:
状态开始中的令牌文本将导致无效的XML文档。确保将构型设置设置为concormancelevel.dragment或conformancelevel.auto如果要编写XML片段.
这 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();
}
解决方案
哦,这很容易。解决方案是包裹 XElement
在 XDocument
目的。问题解决了!
不隶属于 StackOverflow