を使用して取得した、方程式の生成に使用される xml のみを読み取りたいParagraph.Range.WordOpenXML
。しかし、方程式に使用されるセクションはMathML
、Equation
Microsoft がMathML
.
目的の xml を取得するために特別なコンバーターを使用する必要がありますか、それとも他の方法がありますか?
を使用して取得した、方程式の生成に使用される xml のみを読み取りたいParagraph.Range.WordOpenXML
。しかし、方程式に使用されるセクションはMathML
、Equation
Microsoft がMathML
.
目的の xml を取得するために特別なコンバーターを使用する必要がありますか、それとも他の方法がありますか?
OMML2MML.XSL
このファイル ( の下にあります) を使用して、Word 文書に含まれるMicrosoft Office MathML (数式) をMathML%ProgramFiles%\Microsoft Office\Office15
に変換できます。
以下のコードは、次の手順を使用して、Word ドキュメント内の方程式を MathML に変換する方法を示しています。
テキストと画像の 2 つの数式を含む単純な 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 文書全体ではなく、1 つの数式のみを変換するには、目的のOffice Math Paragraph (m:oMathPara)OuterXML
を照会し、このノードのプロパティを使用します。次のコードは、最初の数学段落を照会する方法を示しています。
string mathParagraphXml =
doc.MainDocumentPart.Document.Descendants<DocumentFormat.OpenXml.Math.Paragraph>().First().OuterXml;
返された XML を使用して、TextReader
.