2014-10-09 2 views
0

Я пытаюсь создать таблицу на новой странице OneNote через COM API. Он возвращается с недопустимой XML, но я не могу понять, почему ... Я бы признателен за любую помощь специалиста :)Недопустимая ошибка XML от OneNote API

Я получаю следующее сообщение об ошибке:

Исключение из HRESULT: 0x80042001

при выполнении этого кода:

static string CreatePage(string sectionId, string pageName) 
    { 
     // Create the new page 
     string pageId; 
     onenoteApp.CreateNewPage(sectionId, out pageId, NewPageStyle.npsBlankPageWithTitle); 

     var doc = CreateTable(); 

     // Update the page 
     onenoteApp.UpdatePageContent(doc.ToString()); 

     return pageId; 
    } 

lokup ошибка возвращается с:

hrInvalidXML 
0x80042001 
The XML is invalid. 

Оба примера XML ниже провал ...

Вот некоторые вырубить XML я нагрузка:

<Page> <Outline> <OEChildren>  <OE>     <T><![CDATA[test 2-3 ]]></T>  </OE> </OEChildren> </Outline></Page> 

Вот основной XML

<Page xmlns="http://schemas.microsoft.com/office/onenote/2010/onenote"> 
    <Outline> 
    <OEChildren> 
     <OE> 
     <Table> 
      <Columns> 
      <Column /> 
      <Column /> 
      <Column /> 
      </Columns> 
      <Row> 
      <Cell> 
       <OEChildren> 
       <OE> 
        <T><![CDATA[test 1-1 ]]></T> 
       </OE> 
       </OEChildren> 
      </Cell> 
      <Cell> 
       <OEChildren> 
       <OE> 
        <T><![CDATA[test 1-2 ]]></T> 
       </OE> 
       </OEChildren> 
      </Cell> 
      <Cell> 
       <OEChildren> 
       <OE> 
        <T><![CDATA[test 1-3 ]]></T> 
       </OE> 
       </OEChildren> 
      </Cell> 
      </Row> 
      <Row> 
      <Cell> 
       <OEChildren> 
       <OE> 
        <T><![CDATA[test 2-1 ]]></T> 
       </OE> 
       </OEChildren> 
      </Cell> 
      <Cell> 
       <OEChildren> 
       <OE> 
        <T><![CDATA[test 2-2 ]]></T> 
       </OE> 
       </OEChildren> 
      </Cell> 
      <Cell> 
       <OEChildren> 
       <OE> 
        <T><![CDATA[test 2-3 ]]></T> 
       </OE> 
       </OEChildren> 
      </Cell> 
      </Row> 
     </Table> 
     </OE> 
    </OEChildren> 
    </Outline> 
</Page> 

ответ

2

Ваш XML имеет несколько проблем :

  1. Ваш Page элемент не га ve атрибут ID. Без него OneNote не знает, какую страницу вы пытаетесь обновить. В общем, вы должны сначала прочитать страницу и изменить XML, а затем обновить его новым XML. Это сохранит все, что вы не собираетесь изменять.

  2. Ваши Column элементы отсутствуют необходимые index и width атрибуты, что и делает ваш XML недействительным (не соответствует схеме XSD). Для создания таблиц, если вы не хотите указывать ширину столбцов, вам не нужно даже предоставлять элементы Columns и Column. Они будут созданы после обновления страницы.


Редактировать первородного Плакат

В случае, если кто заинтересован \ имеет аналогичные проблемы, которые я изменяю CreateTable функции

static XDocument CreateTable(string PageID) 
{ 
    var page = new XDocument(new XElement(ns + "Page", 
     new XElement(ns + "Outline", 
     new XElement(ns + "OEChildren", 
      new XElement(ns + "OE", 
      new XElement(ns + "Table", 
       new XElement(ns + "Row", 
        new XElement(ns + "Cell", 
         new XElement(ns + "OEChildren", 
          new XElement(ns + "OE", 
          new XElement(ns + "T", 
           new XCData("test 1-1 "))))), 
        new XElement(ns + "Cell", 
         new XElement(ns + "OEChildren", 
          new XElement(ns + "OE", 
          new XElement(ns + "T", 
           new XCData("test 1-2 "))))), 
        new XElement(ns + "Cell", 
         new XElement(ns + "OEChildren", 
          new XElement(ns + "OE", 
          new XElement(ns + "T", 
           new XCData("test 1-3 ")))))), 
       new XElement(ns + "Row", 
        new XElement(ns + "Cell", 
         new XElement(ns + "OEChildren", 
          new XElement(ns + "OE", 
          new XElement(ns + "T", 
           new XCData("test 2-1 "))))), 
        new XElement(ns + "Cell", 
         new XElement(ns + "OEChildren", 
          new XElement(ns + "OE", 
          new XElement(ns + "T", 
           new XCData("test 2-2 "))))), 
        new XElement(ns + "Cell", 
         new XElement(ns + "OEChildren", 
          new XElement(ns + "OE", 
          new XElement(ns + "T", 
           new XCData("test 2-3 ")))))))))))); 

    page.Root.SetAttributeValue("ID", PageID); 

    return page; 
} 

и назвал его с этим:

var doc = CreateTable(pageId); 
+0

@ Omer-atay-msft безупречное спасибо, обработал удовольствие. – Matt

Смежные вопросы