我在使用XElement
和XslCompiledTransform
的組合時遇到了一些問題。我已經把我在下面使用的示例代碼。如果我使用GetXmlDocumentXml()
方法得到我的輸入XML,它可以正常工作。在國家啓動XElement和XslCompiledTransform存在問題
令牌文本會導致一個無效的XML文檔中:如果我使用GetXElementXml()
方法,而不是,我打電話的XslComiledTransform
的Transform
方法時得到一個InvalidOperationException
。如果要編寫一個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();
}