12 读写openxml
offic2007都是用openxml来构建,当我们在文档中插入一个图表,该图表的样式数据会已xml文件的形式保存在文件charts目录下。我们也可以自定义xml文件然后绑定到文档中。在服务器上程序只需求修改xml文件就可以改变文档中绑定的数据。
下面我们试验通过Package对象来取得docx文件中的xml文件。提示一下:对docx操作的代码不能直接写在该docx文档的工程中,否则系统会提示该文件已经被占用。
//构建Package对象,打开word文档
Package package = Package.Open(@"D:\Backup\我的文档\VisualStudio2008\Projects\WordDocument2\WordDocument2\bin\Debug\WordDocument2.docx");
//用uri对象设置包内文件路径
Uri documetUri = newUri("/word/charts/chart1.xml",UriKind.Relative);
//取得包内文件
PackagePartdocumanetPart = package.GetPart(documetUri);
//声明一个xml对象
XmlDocument documentXml = newXmlDocument();
//将包内文件装载如xml对象
documentXml.Load(documanetPart.GetStream());
//声明xml读取对象
XmlNodeReader readerXml = newXmlNodeReader(documentXml);
while (readerXml.Read())//遍历xml文件
{
if (readerXml.NodeType == XmlNodeType.Element)//如果节点是一个元素。节点有元素和属性两个类型
{
//判断当前节点名是否是我们指定的。如果是就将它输出
//if (xmlread.LocalName.Equals("id")|| xmlread.LocalName.Equals("name") ||xmlread.LocalName.Equals("age"))
//{
//读处节点名和节点数据
// Response.Write(xmlread.LocalName + ":" + xmlread.ReadString());
//}
//string str = readerXml.LocalName+" : " +readerXml.ReadString();
//Console.WriteLine(str);
}
string str = readerXml.LocalName + " : " + readerXml.ReadString();
Console.WriteLine(str);
}
//关闭xml读取对象
readerXml.Close();
另外一个openxml读写的例子
Openxml可以自定义用户数据包,一般在customXml\ item1.xml中。我们可以使用Content Control Toolkit工具生成用户数据xml,然后把用户xml绑定到word控件中。我们只需要修改用户xml就可以实现word数据的动态绑定了。
//构建Package对象,打开word文档
Package package = Package.Open(@"testXml.docx");
//用uri对象设置包内文件路径
Uri documetUri = newUri("/customXml/item1.xml",UriKind.Relative);
//取得包内文件
PackagePart documanetPart =package.GetPart(documetUri);
//声明一个xml对象
XmlDocument documentXml = newXmlDocument();
//将包内文件装载如xml对象
documentXml.Load(documanetPart.GetStream());
//声明xml读取对象
XmlNodeReader readerXml = newXmlNodeReader(documentXml);
//指明要修改的xml节点
XmlNodeList xmlNodeList = documentXml.SelectNodes("/dataroot[1]/表1[1]/name[1]");
//修改节点内容
xmlNodeList[0].InnerText = "世界,你好,我会用xml了!!!";
//写回package
documentXml.Save(documanetPart.GetStream(FileMode.Create,