我使用的组合遇到了一些麻烦 XElementXslCompiledTransform. 。我已经放置了我在下面使用的示例代码。如果我使用输入XML GetXmlDocumentXml() 方法,它可以正常工作。如果我使用 GetXElementXml() 方法相反,我得到了一个 InvalidOperationException 打电话时 Transform 的方法 XslComiledTransform:

状态开始中的令牌文本将导致无效的XML文档。确保将构型设置设置为concormancelevel.dragment或conformancelevel.auto如果要编写XML片段.

CreateNavigator 两者的方法 XElementXmlDocument 返回 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();
}
有帮助吗?

解决方案

哦,这很容易。解决方案是包裹 XElementXDocument 目的。问题解决了!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top