2013-12-23 2 views
0

Я создаю XElement через класс htmlconverter из OpenXML Powertools.Проблемы с изменением 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 («голова») всегда возвращается нуль, и я получаю NullReferenceException ошибка из Visual Studio при работе в Режим отладки, и я до сих пор не знаю, почему.

Это код, основанный на этом 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()); 
    } 
} 
+0

html.Firstnode работает, так что я в состоянии создать свою собственную голову XElement и заменить его firstnode в HTML (который всегда должен быть голова). Это работает для меня в настоящий момент, но я все еще не удовлетворен этим решением. – user3120053

ответ

0

Вы пропустили пространство имен, попробуйте вместо этого:

XNamespace w = "http://www.w3.org/1999/xhtml"; 
var head = html.Element(w + "head"); 
Смежные вопросы