Вставить узел в существующий XDocument через код - PullRequest
1 голос
/ 29 февраля 2012

Вставить узел в существующий XDocument с помощью кода.

Я использовал WordprocessingDocument, чтобы открыть документ Word, в который встроена XML-схема, а через XmlReader изменен на XDocument

XDocument имеет видниже

<w:document xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 wp14">
  <w:body>
    <w:customXml w:uri="http://tempuri.org/CustomSchema.xsd" w:element="UserDetails">
    <w:p w:rsidR="00FE0E5B" w:rsidRDefault="00FE0E5B" />
        <w:tbl>
          <w:tblPr>
            <w:tblStyle w:val="TableGrid" />
             <w:tblW w:w="0" w:type="auto" />
            <w:tblLook w:val="04A0" w:firstRow="1" w:lastRow="0" w:firstColumn="1"                       w:lastColumn="0" w:noHBand="0" w:noVBand="1" />
          </w:tblPr>
        <w:tblGrid>
          <w:gridCol w:w="4788" />
          <w:gridCol w:w="4788" />
        </w:tblGrid>
     <w:tr w:rsidR="0099743C" w:rsidTr="005B2968">
          <w:tc>
            <w:tcPr>
              <w:tcW w:w="4788" w:type="dxa" />
            </w:tcPr>
            <w:p w:rsidR="0099743C" w:rsidRDefault="0099743C" w:rsidP="005B2968">
              <w:r>
                <w:t>User Name</w:t>
              </w:r>
            </w:p>
          </w:tc>
          <w:customXml w:uri="http://tempuri.org/CustomSchema.xsd" w:element="UserName">
            <w:tc>
              <w:tcPr>
                <w:tcW w:w="4788" w:type="dxa" />
              </w:tcPr>
              <w:p w:rsidR="0099743C" w:rsidRDefault="0099743C" w:rsidP="005B2968">
                <w:r>
                  <w:t xml:space="preserve">   </w:t>
                </w:r>
              </w:p>
            </w:tc>
          </w:customXml>
        </w:tr>

//////////new node to be appended here

     </w:tbl>
      <w:p w:rsidR="00FE0E5B" w:rsidRDefault="00FE0E5B" />
      <w:p w:rsidR="003978D7" w:rsidRDefault="009A3CD3" />
    </w:customXml>
    <w:sectPr w:rsidR="003978D7">
      <w:pgSz w:w="12240" w:h="15840" />
      <w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440" w:header="720" w:footer="720" w:gutter="0" />
      <w:cols w:space="720" />
      <w:docGrid w:linePitch="360" />
    </w:sectPr>
  </w:body>
</w:document>

Я хочу добавить узел как

<w:tr w:rsidR="007C2DEB" w14:paraId="14C244F6" w14:textId="77777777" w:rsidTr="005B2968" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
  <w:tc>
    <w:tcPr>
      <w:tcW w:w="4788" w:type="dxa" />
    </w:tcPr>
    <w:p w14:paraId="08782D94" w14:textId="06E7BC60" w:rsidR="007C2DEB" w:rsidRDefault="007C2DEB" w:rsidP="005B2968">
      <w:r>
        <w:t xml:space="preserve">Password </w:t>
      </w:r>
    </w:p>
  </w:tc>
  <w:customXml w:uri="http://tempuri.org/CustomSchema.xsd" w:element="Password">
    <w:tc>
      <w:tcPr>
        <w:tcW w:w="4788" w:type="dxa" />
      </w:tcPr>
      <w:p w14:paraId="05792D0F" w14:textId="2205EB25" w:rsidR="007C2DEB" w:rsidRDefault="007C2DEB" w:rsidP="005B2968">
        <w:r>
          <w:t xml:space="preserve"> </w:t>
        </w:r>
      </w:p>
    </w:tc>
    <w:bookmarkStart w:id="0" w:name="_GoBack" w:displacedByCustomXml="next" />
    <w:bookmarkEnd w:id="0" w:displacedByCustomXml="next" />
  </w:customXml>
</w:tr>

сразу после узла «Имя пользователя» и после этого сохранить объединенный документ.

1 Ответ

0 голосов
/ 01 марта 2012

Могу ли я с уважением предложить, чтобы, если вы собираетесь изменять внутреннюю структуру документов OOXML, вы взглянули на SDK, специально предназначенный для этой цели: http://msdn.microsoft.com/en-us/library/bb448854.aspx?Лично мне было бы неудобно делать такие низкоуровневые манипуляции с очень сложным документом XMl, не имея каких-то ограничений и бизнес-правил.OpenXML SDK делает именно это.См. http://msdn.microsoft.com/en-us/library/bb608618.aspx о том, как управлять пользовательскими частями XML в документе Word

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...