using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Xml; using System.Xml.Linq; using DocumentFormat.OpenXml.Packaging; public static class LocalExtensions { public static string GetPath(this XElement el) { return el .AncestorsAndSelf() .Aggregate("", (seed, i) => i.Name.LocalName + "/" + seed); } } class Program { readonly static XNamespace w = "http://schemas.openxmlformats.org/wordprocessingml/2006/main"; public static XDocument LoadXDocument(OpenXmlPart part) { XDocument xdoc; using (StreamReader streamReader = new StreamReader(part.GetStream())) xdoc = XDocument.Load(XmlReader.Create(streamReader)); return xdoc; } public static string GetParagraphStyle(XElement para) { return (string)para.Elements(w + "pPr") .Elements(w + "pStyle") .Attributes(w + "val") .FirstOrDefault(); } static void Main(string[] args) { const string filename = "SampleDoc.docx"; using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(filename, true)) { MainDocumentPart mainPart = wordDoc.MainDocumentPart; XDocument mainPartDoc = LoadXDocument(mainPart); var paragraphs = mainPartDoc.Root .Element(w + "body") .Descendants(w + "p") .Select(p => new { ParagraphNode = p, Style = GetParagraphStyle(p) } ); foreach (var p in paragraphs) Console.WriteLine("{0} {1}", p.Style != null ? p.Style.PadRight(12) : "".PadRight(12), p.ParagraphNode.GetPath()); } } }