【问题标题】:Problem with XElement and XslCompiledTransformXElement 和 XslCompiledTransform 的问题
【发布时间】:2010-06-08 14:48:42
【问题描述】:

我在使用 XElementXslCompiledTransform 的组合时遇到了一些问题。我把我正在使用的示例代码放在下面。如果我使用 GetXmlDocumentXml() 方法获取输入 XML,它工作正常。如果我改用GetXElementXml() 方法,则在调用XslComiledTransformTransform 方法时会得到InvalidOperationException

处于 Start 状态的标记文本会导致 XML 文档无效。如果要编写 XML 片段,请确保 ConformanceLevel 设置设置为 ConformanceLevel.Fragment 或 ConformanceLevel.Auto

XElementXmlDocument 上的 CreateNavigator 方法返回一个 XPathNavigatorXmlDocument 有什么额外的东西,这一切都有效,我怎样才能对 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();
}

【问题讨论】:

    标签: c# .net xmldocument xelement xslcompiledtransform


    【解决方案1】:

    哦,那很简单。解决方案是将XElement 包装在XDocument 对象中。问题解决了!

    【讨论】:

      猜你喜欢
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 2023-03-18
      • 2011-07-13
      • 1970-01-01
      相关资源
      最近更新 更多