写在开头:在写这篇文章之前,我对Word Xml的研究并不是很深入,近期才开始做相关方面的开发。在我准备着手对Word Xml进行研究时,发现网上的资料并不是很全面,因此,在我记忆还算深刻之时,打算记录下我对Word Xml文档的理解,以供读者参考。(注:Office与Wps的文档稍有不同,不相匹配之时以Office为准)
首先,我们从一个普通的Word文档开始,通过VSTO打开这个文档,然后获取到里面的内容。
using Microsoft.Office.Interop.Word; //引用 Microsoft Office 15.0 Object Library
xmlDoc = new XmlDocument();
public void GetWordXml()
{ Application wordApp = new Word.Application()//先创建word文档的实例 Document doc = null; doc = app.Documents.Open(filePath);//通过文件地址打开文档 string xmlStr = doc.WordOpenXml; xmlDoc.LoadXml(xmlStr );//获取到Xml内容 doc.Close();//关闭文档 wordApp.Quit(); }
现在已经获取到Word Xml的所有内容了,然后再从中取到需要的部分。
using System.Xml; XmlNamespaceManager xnm = null; XmlNode nodeHead = null; XmlNode nodeFoot = null; XmlNode nodeBody = null;
public void GetXmlContent() { XmlNamespaceManager xnm = new XmlNamespaceManager(xmlDoc.NameTable); xnm.AddNamespace("w", "http://schemas.openxmlformats.org/wordprocessingml/2006/main"); xnm.AddNamespace("pkg", "http://schemas.microsoft.com/office/2006/xmlPackage"); nodeHead = xmlDoc.SelectSingleNode("//pkg:part[@pkg:name='/word/header1.xml']/pkg:xmlData/w:hdr", xnm);//获取页眉 nodeFoot = xmlDoc.SelectSingleNode("//pkg:part[@pkg:name='/word/footer1.xml']/pkg:xmlData/w:ftr", xnm);//获取页脚 nodeBody = xmlDoc.SelectSingleNode("//w:document/w:body", xnm);//获取文档内容 }
还有一个地方值得注意,页眉和页脚如果设置了"首页不同"和“奇偶页不同”,那么获取页眉和页脚也稍有不同,注意我们上面的是这样写的 :[pkg:part[@pkg:name='/word/header1.xml']
这个名称后面的数字表示的是不同的页眉。当设置了“首页不同”时,首页的页眉页脚就是 [3] ;若设置了“奇偶页不同”,偶数页是 [1] ,奇数页则为 [2];若是没有设置“奇偶页不同”,[1]则为默认的所有页码的页眉。
nodeHead = xmlDoc.SelectSingleNode("//pkg:part[@pkg:name='/word/header1.xml']/pkg:xmlData/w:hdr", xnm);//偶数页眉,没有其他设置的情况下则为默认页眉。 nodeHead = xmlDoc.SelectSingleNode("//pkg:part[@pkg:name='/word/header2.xml']/pkg:xmlData/w:hdr", xnm);//奇数页眉 nodeHead = xmlDoc.SelectSingleNode("//pkg:part[@pkg:name='/word/header3.xml']/pkg:xmlData/w:hdr", xnm);//首页页眉
本篇文章就到这里,接下来应该要讲的是Word Xml文档中的常用标签,不过没必要大费周章地单独写出来,因此推荐浏览后面这篇博客,应该是比较全面的标签了【整理】Word OpenXML常用标签
后面更新其他章节中用到的标签,而上面的这篇博客又未曾列出来的,我会在本篇文章下更新列举。