2016-08-23 1 views
0

Ich arbeite gerade an einer Möglichkeit, ein Wordml-Xml (oder vielmehr den Body-Part) in ein gültiges xhtml/html Format zu konvertieren. Der Grund dafür ist, dass es eine Reihe von Pausen, Absätzen usw. gibt, die ich in meiner WebForms-Anwendung richtig anzeigen möchte.Wordml (Xml) nach XHTML/HTML konvertieren

Ich habe in den letzten paar Stunden nach Möglichkeiten gesucht, dies zu tun, und das einzige, was ich fand, dass meine Probleme etwas ähnelt, ist der folgende Blog (https://msdn.microsoft.com/en-us/library/ff628051(v=office.14).aspx#XHtml_Using). Das Problem besteht darin, dass die Transformation auf DOCX und nicht auf XML basiert. Ich könnte versuchen, das XML in ein docx zu konvertieren und damit zu arbeiten, aber das wäre nicht wirklich ein effektiver Weg, damit umzugehen. Ganz zu schweigen davon, dass ich zuerst einen Weg finden musste, XML in docx zu konvertieren.

Ich hoffe wirklich, dass jemand da draußen mir dabei helfen kann, weil ich etwas aus Ideen bin.

Vielen Dank im Voraus, snap.

Beispiel: Die w: body-Element innerhalb des XML sieht wie folgt aus:

<w:body xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml"> 
    <wx:sect xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint"> 
    <w:p wsp:rsidR="00FF5F75" wsp:rsidRDefault="00626E80" xmlns:wsp="http://schemas.microsoft.com/office/word/2003/wordml/sp2"> 
     <w:r wsp:rsidRPr="00EA67E2"> 
     <w:rPr> 
      <w:rFonts w:fareast="Times New Roman" /> 
      <w:sz w:val="26" /> 
      <w:sz-cs w:val="26" /> 
      <w:lang w:fareast="JA" /> 
     </w:rPr> 
     <w:t>Leider können wir die Kosten für die Impfung gegen %</w:t> 
     </w:r> 
     <w:r wsp:rsidRPr="00EA67E2"> 
     <w:rPr> 
      <w:rFonts w:fareast="Times New Roman" /> 
      <w:sz w:val="26" /> 
      <w:sz-cs w:val="26" /> 
      <w:highlight w:val="yellow" /> 
      <w:lang w:fareast="JA" /> 
     </w:rPr> 
     <w:t>XY</w:t> 
     </w:r> 
     <w:r wsp:rsidRPr="00EA67E2"> 
     <w:rPr> 
      <w:rFonts w:fareast="Times New Roman" /> 
      <w:sz w:val="26" /> 
      <w:sz-cs w:val="26" /> 
      <w:lang w:fareast="JA" /> 
     </w:rPr> 
     <w:t>% nicht übernehmen.</w:t> 
     </w:r> 
     <w:r wsp:rsidRPr="00EA67E2"> 
     <w:rPr> 
      <w:rFonts w:fareast="Times New Roman" /> 
      <w:sz w:val="26" /> 
      <w:sz-cs w:val="26" /> 
      <w:lang w:fareast="JA" /> 
     </w:rPr> 
     <w:br /> 
     </w:r> 
     <w:r wsp:rsidRPr="00EA67E2"> 
     <w:rPr> 
      <w:rFonts w:fareast="Times New Roman" /> 
      <w:sz w:val="26" /> 
      <w:sz-cs w:val="26" /> 
      <w:lang w:fareast="JA" /> 
     </w:rPr> 
     <w:br /> 
     <w:t>Die DAK-Gesundheit zahlt Ihnen die Impfungen, die in den Schutzimpfungs-Richtlinien des Gemeinsamen Bundesausschusses genannt sind. Die Impfung gegen %</w:t> 
     </w:r> 
.... 

In einem normalen Word-Dokument, wo das Ding ist Teil eines Add-in Word zeigt als Bruch ist usw. Was ich will ist, diese Elemente in das richtige HTML/XHTML zu konvertieren.

+0

Können Sie die MSOffice API (über Interop, wenn ich mich richtig erinnere) nicht verwenden, um einen "Export als HTML" in der Datei durchzuführen? –

+0

Ich bin mir ziemlich sicher, dass es so nicht funktioniert. Sie benötigen das "docx" -Format, um es in HTML zu exportieren, und dafür müssen Sie ein Office installiert haben, das in einer Webanwendung nicht wirklich so ausgefallen ist. – OhSnap

Antwort

0
Try 

protected string ConvertXmlToHtmlTable(string xml) 
{ 
    StringBuilder html = new StringBuilder("<table align='center' " + 
    "border='1' class='xmlTable'>\r\n"); 
    try 
    { 
     XDocument xDocument = XDocument.Parse(xml); 
     XElement root = xDocument.Root; 

     var xmlAttributeCollection = root.Elements().Attributes(); 


     foreach (var ele in root.Elements()) 
     { 
      if (!ele.HasElements) 
      { 
       string elename = ""; 
       html.Append("<tr>"); 

       elename = ele.Name.ToString(); 

       if (ele.HasAttributes) 
       { 
        IEnumerable<XAttribute> attribs = ele.Attributes(); 
        foreach (XAttribute attrib in attribs) 
        elename += Environment.NewLine + attrib.Name.ToString() + 
        "=" + attrib.Value.ToString(); 
       } 

       html.Append("<td>" + elename + "</td>"); 
       html.Append("<td>" + ele.Value + "</td>"); 
       html.Append("</tr>"); 
      } 
      else 
      { 
       string elename = ""; 
       html.Append("<tr>"); 

       elename = ele.Name.ToString(); 

       if (ele.HasAttributes) 
       { 
        IEnumerable<XAttribute> attribs = ele.Attributes(); 
        foreach (XAttribute attrib in attribs) 
        elename += Environment.NewLine + attrib.Name.ToString() + "=" + attrib.Value.ToString(); 
       } 

       html.Append("<td>" + elename + "</td>"); 
       html.Append("<td>" + ConvertXmlToHtmlTable(ele.ToString()) + "</td>"); 
       html.Append("</tr>"); 
      } 
     } 

     html.Append("</table>"); 
    } 
    catch (Exception e) 
    { 
     return xml; 
     // Returning the original string incase of error. 
    } 
    return html.ToString(); 
} 
+0

Ehh .. Ich glaube nicht, dass Sie verstanden haben, was mein Problem ist. Ich werde das OP aktualisieren. Danke anywaswas. – OhSnap

+0

Sicher keine Probleme. Lass es mich wissen, wenn du Hilfe brauchst. – Justin