代码之家  ›  专栏  ›  技术社区  ›  Graham Clark

Xelement和XslCompiledTransform的问题

  •  1
  • Graham Clark  · 技术社区  · 14 年前

    我在使用 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();
    }
    
    1 回复  |  直到 14 年前
        1
  •  3
  •   Graham Clark    14 年前

    哦,那很简单。解决方法是将 XElement 在一个 XDocument 对象。问题解决了!