提问人:OhSnap 提问时间:8/23/2016 最后编辑:OhSnap 更新时间:2/23/2022 访问量:482
将 wordml (xml) 转换为 XHTML/HTML
Convert wordml (xml) to XHTML/HTML
问:
我目前正在研究一种将wordml-xml(或者更确切地说是body-part)转换为有效的xhtml / html格式的方法。原因是有一堆中断、段落等,我想在我的 WebForms-Application 中正确显示。
在过去的几个小时里,我一直在寻找做到这一点的方法,我发现唯一与我的问题有点相似的是以下博客 (https://msdn.microsoft.com/en-us/library/ff628051(v=office.14).aspx#XHtml_Using)。问题在于转换基于 .docx 而不是 XML。我可以尝试将 XML 转换为 docx 并使用它,但这并不是处理它的有效方法。更不用说我必须先找到一种方法将 XML 转换为 docx。
我真的希望有人能帮助我解决这个问题,因为我有点出主意。
提前致谢,啪。
示例:XML 内部的 w:body-Element 如下所示:
<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>
....
在常规的 Word 文档中,此内容是加载项的一部分 word 显示为中断等。我想要的是将这些元素转换为正确的 HTML/XHTML。
答:
0赞
Justin
8/23/2016
#1
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赞
OhSnap
8/23/2016
呃..我想你不明白我的问题是什么。我会更新 OP。 谢谢 anywas。
0赞
Justin
8/24/2016
当然没有问题。如果您需要任何帮助,请告诉我。
0赞
Gomiunik
2/23/2022
#2
github 上有一个项目和一个名为 Open XML Power Tools 的 nuget 包。它的功能之一是将 DOCX 高保真转换为 HTML/CSS。还没有尝试过,但可能很快就会尝试过。
评论