【问题标题】:Problems to modify XElement after using Converter使用 Converter 后修改 XElement 的问题
【发布时间】:2014-01-11 22:50:00
【问题描述】:

我正在通过 OpenXML Powertools 中的 htmlconverter 类创建一个 XElement。

XElement html = HtmlConverter.ConvertToHtml(doc, settings)

现在我正在尝试添加一些新节点,例如

html.Element("head").Add(new XElement("link",
                    new XAttribute("href", "stylesheet.css"),
                    new XAttribute("rel", "stylesheet"),
                    new XAttribute("type", "text/css")));

但是 html.Element("head") 总是返回 null 并且我在调试模式下运行时从 Visual Studio 收到 NullReferenceException 错误,我仍然不知道为什么。

这是基于 article 的代码,我目前在我的项目中使用它。我认为它必须与 htmlconverter 做一些事情,因为如果我创建一个手工制作的 XElement,它就可以工作。

// This example shows the simplest conversion. No images are converted.
// A cascading style sheet is not used.
byte[] byteArray = File.ReadAllBytes("Test.docx");
using (MemoryStream memoryStream = new MemoryStream())
{
    memoryStream.Write(byteArray, 0, byteArray.Length);
    using (WordprocessingDocument doc =
        WordprocessingDocument.Open(memoryStream, true))
    {
        HtmlConverterSettings settings = new HtmlConverterSettings()
        {
            PageTitle = "My Page Title"
        };
        XElement html = HtmlConverter.ConvertToHtml(doc, settings);

        // Note: the XHTML returned by ConvertToHtmlTransform contains objects of type
        // XEntity. PtOpenXmlUtil.cs defines the XEntity class. See
        // http://blogs.msdn.com/ericwhite/archive/2010/01/21/writing-entity-references-using-linq-to-xml.aspx
        // for detailed explanation.
        //
        // If you further transform the XML tree returned by ConvertToHtmlTransform, you
        // must do it correctly, or entities do not serialize properly.

        File.WriteAllText("Test.html", html.ToStringNewLineOnAttributes());
    }
}

【问题讨论】:

  • html.Firstnode 有效,因此我可以创建自己的 head XElement 并将其替换为 html 中的 firstnode(始终应该是 head)。目前它对我有用,但我仍然对这个解决方案不满意。

标签: c# xhtml openxml xelement


【解决方案1】:

你错过了命名空间,试试这个:

XNamespace w = "http://www.w3.org/1999/xhtml";
var head = html.Element(w + "head");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    相关资源
    最近更新 更多