5

を使用して取得した、方程式の生成に使用される xml のみを読み取りたいParagraph.Range.WordOpenXML。しかし、方程式に使用されるセクションはMathMLEquationMicrosoft がMathML.

目的の xml を取得するために特別なコンバーターを使用する必要がありますか、それとも他の方法がありますか?

4

1 に答える 1

6

OMML2MML.XSLこのファイル ( の下にあります) を使用して、Word 文書に含まれるMicrosoft Office MathML (数式) をMathML%ProgramFiles%\Microsoft Office\Office15に変換できます。

以下のコードは、次の手順を使用して、Word ドキュメント内の方程式を MathML に変換する方法を示しています。

  1. OpenXML SDK (バージョン 2.5) を使用して Word 文書を開きます。
  2. XslCompiledTransform を作成し、OMML2MML.XSL ファイルを読み込みます。
  3. 作成された XslCompiledTransform インスタンスで Transform() メソッドを呼び出して、Word ドキュメントを変換します。
  4. 変換の結果を出力します (例: コンソールへの出力またはファイルへの書き込み)。

テキストと画像の 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.

于 2013-05-27T16:56:32.087 に答える