如何在WordOpenXML的输出中解析mathML?

我想只读取用于生成方程的xml,我使用Paragraph.Range.WordOpenXML获得。 但是用于等式的部分不是MathML ,因为我发现microsoft的EquationMathML

我需要使用一些特殊的转换器来获得所需的xmls还是有其他方法吗?

您可以使用OMML2MML.XSL文件(位于%ProgramFiles%\Microsoft Office\Office15 )将Word文档中包含的Microsoft Office MathML (方程式)转换为MathML

下面的代码显示了如何使用以下步骤将word文档中的方程转换为MathML:

  1. 使用OpenXML SDK(版本2.5)打开word文档。
  2. 创建一个XslCompiledTransform并加载OMML2MML.XSL文件。
  3. 通过在创建的XslCompiledTransform实例上调用Transform()方法来转换word文档。
  4. 输出转换结果(例如,在控制台上打印或写入文件)。

我用一个包含两个方程式,文本和图片的简单word文档测试了下面的代码。

 using System.IO; using System.Xml; using System.Xml.Xsl; using DocumentFormat.OpenXml.Packaging; public string GetWordDocumentAsMathML(string docFilePath, string officeVersion = "14") { string officeML = string.Empty; using (WordprocessingDocument doc = WordprocessingDocument.Open(docFilePath, false)) { string wordDocXml = doc.MainDocumentPart.Document.OuterXml; XslCompiledTransform xslTransform = new XslCompiledTransform(); // The OMML2MML.xsl file is located under // %ProgramFiles%\Microsoft Office\Office15\ xslTransform.Load(@"c:\Program Files\Microsoft Office\Office" + officeVersion + @"\OMML2MML.XSL"); using (TextReader tr = new StringReader(wordDocXml)) { // Load the xml of your main document part. using (XmlReader reader = XmlReader.Create(tr)) { using (MemoryStream ms = new MemoryStream()) { XmlWriterSettings settings = xslTransform.OutputSettings.Clone(); // Configure xml writer to omit xml declaration. settings.ConformanceLevel = ConformanceLevel.Fragment; settings.OmitXmlDeclaration = true; XmlWriter xw = XmlWriter.Create(ms, settings); // Transform our OfficeMathML to MathML. xslTransform.Transform(reader, xw); ms.Seek(0, SeekOrigin.Begin); using (StreamReader sr = new StreamReader(ms, Encoding.UTF8)) { officeML = sr.ReadToEnd(); // Console.Out.WriteLine(officeML); } } } } } return officeML; } 

要仅转换一个单个方程(而不是整个word文档),只需查询所需的Office Math Paragraph(m:oMathPara)并使用此节点的OuterXML属性。 下面的代码显示了如何查询第一个数学段落:

 string mathParagraphXml = doc.MainDocumentPart.Document.Descendants().First().OuterXml; 

使用返回的XML来提供TextReader