使用C++和XML建立智能文档(二)

合集下载

closedxml使用手册

closedxml使用手册

ClosedXML 是一个用于处理XML 文档的轻量级库,它提供了许多方便的功能,如数据解析、数据验证和XPath 查询等。

以下是ClosedXML 使用手册的简要概述:一、ClosedXML 简介ClosedXML 是一个用于处理XML 文档的库,它提供了许多方便的功能,如数据解析、数据验证和XPath 查询等。

它采用闭包语法,使得XML 文档的结构更加紧凑,易于维护。

二、ClosedXML 的使用方法1. 创建XML 文档对象:使用ClosedXML 创建一个XML 文档对象,可以使用以下代码:```csharpvar workbook = new XLWorkbook();```2. 添加XML 数据:使用ClosedXML 将数据添加到XML 文档中,可以使用以下代码:```csharpvar worksheet = workbook.Worksheets.Add("Sheet1");worksheet.Cell("A1").Value = "Name";worksheet.Cell("B1").Value = "Age";worksheet.Cell("A2").Value = "John";worksheet.Cell("B2").Value = 30;```3. 保存XML 文档:使用ClosedXML 将XML 数据保存到文件中,可以使用以下代码:```csharpworkbook.SaveAs(@"C:\example\example.xml");```4. 读取XML 数据:使用ClosedXML 从文件中读取XML 数据,可以使用以下代码:```csharpvar workbook = XLWorkbook.Open(@"C:\example\example.xml");var worksheet = workbook.Worksheets[0];string name = worksheet.Cell("A2").Value.ToString();int age = worksheet.Cell("B2").Value.ToInteger();```5. 进行XPath 查询:使用ClosedXML 进行XPath 查询以获取特定数据,可以使用以下代码:```csharpvar xmlDoc = new XDocument(worksheet.Range("A1:B3").ToXmlDocument());var names = from el in xmlDoc.Root.Elements("row") where (string)el.Element("Name") != "" select el.Element("Name").Value; foreach (var name in names) {Console.WriteLine(name);}```三、ClosedXML 的注意事项在使用ClosedXML 处理XML 数据时,需要注意以下几点:-需要确保所使用的ClosedXML 版本与您的开发环境兼容。

C语言读写XML文档:libmxml库初学笔记(Mini-XML)

C语言读写XML文档:libmxml库初学笔记(Mini-XML)

C语⾔读写XML⽂档:libmxml库初学笔记(Mini-XML)使⽤XML存取数据很⽅便。

官⽹有详尽的英⽂⼿册,这⾥还找到了⼀份中⽂⼿册:这⾥只放⾃⼰学习时写的测试代码,有兴趣的同学可以做个参考。

#include<mxml.h>//创建xml⽂档//声明创建 xml树需要的 node节点mxml_node_t* xml; // xml格式标记mxml_node_t* keys_n; // 词汇库,unkey-词汇主键的⽗节点mxml_node_t* unikey_n; //⼀条词汇记录的基本单元,mark-词汇标签和 explain-词汇释义的⽗节点mxml_node_t* elem_n; //创建 mark explain 的节点//在内存中通过挂载node节点,构建 xml treexml=mxmlNewXML("1.0");//创建xml⽂档格式标记,必须,xml tree的根keys_n=mxmlNewElement(xml, "keys");//新节点,名为keys,挂载到 xmlunikey_n=mxmlNewElement(keys_n, "unikey");//新节点,名为unikey,挂载到 keysmxmlElementSetAttr(unikey_n, "word", "go alpha");//为unikey_n的节点设置属性:word="go alpha"elem_n=mxmlNewElement(unikey_n, "elem");//新节点,名为elem, 挂载到unikeymxmlElementSetAttr(elem_n, "element", "mark");//为elem_n的节点设置属性:element="mark"mxmlNewText(elem_n, 0, "AI");//为elem_n的节点新增⽂本,⽂本前的whitespace(空格)个数为0,内容为”AI”elem_n=mxmlNewElement(unikey_n, "elem");//新节点,名为elem, 挂载到unikeymxmlElementSetAttr(elem_n, "element", "explain");//为elem_n的节点设置属性:element="explain"mxmlNewText(elem_n, 0, "Google的AI程序");//为elem_n的节点新增⽂本,⽂本前的whitespace(空格)个数为0//将内存中创建的节点树写⼊⽂件FILE *fp = fopen("/Users/yaou/Area/tmp/xmltest-1.xml", "w");mxmlSaveFile(xml, fp, MXML_NO_CALLBACK);//关闭⽂件fclose(fp);//释放内存中的节点树mxmlDelete(xml);之后⼿动在新⽂件xmltext-1.xml ⾥添加⾥⼀些节点。

eclipse编写xml文件案例

eclipse编写xml文件案例

Eclipse是一个广泛使用的集成开发环境(IDE),在其中可以编写各种编程语言的代码,包括但不限于Java、C++、Python等。

在Eclipse中,XML文件也是常见的文件类型,因此在本文中我将向大家介绍在Eclipse中编写XML文件的方法和技巧,并结合实际案例进行讲解。

1. Eclipse环境搭建我们需要确保已经在计算机上成功安装了Eclipse IDE。

如果还没有安装,可以在官方全球信息湾上下载最新版本的Eclipse并按照指引进行安装。

安装完成后,打开Eclipse并新建一个Java项目或者其他类型的项目,在项目中可以方便地创建和编辑XML文件。

2. 创建XML文件在Eclipse中创建一个XML文件非常简单,只需右键点击项目文件夹,选择“New” -> “File”来创建一个新文件,并在文件名后添加“.xml”后缀,然后在弹出的编辑器中输入XML的内容即可。

3. 编写XML文件编写XML文件时需要注意遵循XML的语法规则,包括标签的闭合、属性的赋值等。

在Eclipse中,可以使用自带的XML编辑器或者安装XML插件来更便捷地编写XML文件。

Eclipse还支持XML的语法高亮、代码折叠等功能,可以在“Preferences” -> “General” -> “Editors” -> “File Associations”中找到XML文件关联的编辑器,并进行相应的设置。

4. XML文件的调试和验证在Eclipse中调试和验证XML文件也是非常方便的。

可以使用内置的XML验证工具来检查XML文件的语法错误,或者使用外部工具来验证XML文件的合法性。

可以在Eclipse中使用断点等调试技术来调试XML文件的生成和处理过程,提高XML文件的稳定性和可靠性。

5. 实际案例演示接下来,我将以一个实际的案例来演示在Eclipse中编写XML文件的过程。

假设我们需要创建一个简单的学生信息管理系统的XML配置文件,包括学生的尊称、学号、班级等信息。

closedxml使用手册

closedxml使用手册

closedxml使用手册摘要:一、closedxml简介二、closedxml基本语法三、closedxml常用功能与应用四、closedxml实战案例五、closedxml进阶技巧六、closedxml与其他库的比较七、closedxml的未来发展八、总结与建议正文:closedxml是一款功能强大的XML处理库,广泛应用于各种编程语言中。

本文将介绍closedxml的使用方法、常用功能、实战案例以及与其他库的比较等内容,帮助读者更好地理解和运用closedxml。

一、closedxml简介closedxml是一款开源、轻量级的XML处理库,支持C++、Python、Java等多种编程语言。

它提供了简单易用的API,使得开发者可以快速地操作XML文档,提高开发效率。

二、closedxml基本语法1.创建XML文档使用closedxml创建XML文档,首先需要引入库,然后创建一个XMLDocument对象。

例如,在Python中引入closedxml库后,可以如下创建XML文档:```pythonfrom closedxml import XMLDocumentdoc = XMLDocument()```2.读取XML文档要读取XML文档,可以使用`load()`方法。

例如,在Python中读取一个名为`example.xml`的文档:```pythondoc.load("example.xml")```3.添加、删除、修改节点closedxml支持添加、删除和修改XML文档中的节点。

例如,在Python 中添加一个子节点:```pythondoc.root.append(XMLNode("child", "text"))```4.获取节点属性closedxml提供了便捷的方法获取节点属性。

例如,在Python中获取某个节点的属性值:```pythonode = doc.root.find("./child")attribute_value = node.attribute("attribute_name")```5.遍历XML文档closedxml支持使用XPath表达式遍历XML文档。

libxml2教程

libxml2教程

C++的XML编程经验――LIBXML2库使用指南写这篇文章的原因有如下几点:1)C++标准库中没有操作XML的方法,用C++操作XML文件必须熟悉一种函数库,LIBXML2是其中一种很优秀的XML库,而且它同时支持多种编程语言;2)LIBXML2库的Tutorial写得不太好,尤其是编码转换的部分,不适用于中文编码的转换;3)网上的大多数关于Libxml2的介绍仅仅是翻译了自带的资料,没有详细介绍如何在windows平台下进行编程,更很少提到如何解决中文问题。

基于以上几点原因,决定写一个在Windows平台下,使用C/C++语言,应用LibXml2库来进行xml文档操作,同时使用ICONV库进行中文编码转换的文档。

其中还涉及了Makefile、XPATH等相关内容。

本文中所有的源代码在/Files/wxb_nudt/xml_src.rar。

1.下载与安装LIBXML2和ICONVLibxml2是一个C语言的XML程序库,可以简单方便的提供对XML文档的各种操作,并且支持XPATH查询,以及部分的支持XSLT转换等功能。

Libxml2的下载地址是/,完全版的库是开源的,并且带有例子程序和说明文档。

最好将这个库先下载下来,因为这样可以查看其中的文档和例子。

windows版本的的下载地址是/libxml.en.html;这个版本只提供了头文件、库文件和dll,不包含源代码、例子程序和文档。

在文本中,只需要下载libxml2库、iconv库和zlib库就行了(注意,libxml2库依赖iconv和zlib库,本文中重点关注libxml2和iconv,zlib不介绍),我使用的版本是libxml2-2.6.30.win32.zip、zlib-1.2.3.win32.zip 和iconv-1.9.2.win32.zip。

在编程的时候,我们使用windows版本的libxml2、zlib和iconv,将其解压缩到指定文件夹,例如D:"libxml2-2.6.30.win32,D:"zlib-1.2.3.win32以及D:"iconv-1.9.2.win32。

c#读写XML文件

c#读写XML文件

System.Xml命名空间包含了一些最重要的XML类,其中最主要的类是和XML文档的读写操作相关的类。这些类中包括4个与读相关的类以及2个与写相关的类。它们分别是:XmlReader、XmlTextReader、 XmlValidatingReader、XmlNodeReader、XmlWriter以及 XmlTextWriter。本文将重点介绍这些类,因为它们是最基本也是最重要的类。
XmlNode类是一个非常重要的类,它代表了XML文档中的某个节点。该节点可以是XML文档的根节点,这样它就代表整个XML文档了。它是许多很有用的类的基类,这些类包括插入节点的类、删除节点的类、替换节点的类以及在XML文档中完成导航功能的类。同时,XmlNode类还为程序员提供了获取双亲节点、子节点、最后一个子节点、节点名称以及节点类型等的属性。它的三个最主要的子类包括: XmlDocument、XmlDataDocument以及XmlDocumentFragment。XmlDocument类代表了一个XML文档,它提供了载入和保存XML文档的方法和属性。这些方法包括了Load、LoadXml和Save等。同时,它还提供了添加特性(Attributes)、说明(Comments)、空间(Spaces)、元素(Elements)和新节点(New Nodes)等XML项的功能。XmlDocumentFragment类代表了一部分XML文档,它能被用来添加到其他的XML文档中。 XmlDataDocument类可以让程序员更好地完成和中的数据集对象之间的互操作。
using System;
using System.Xml;
namespace ReadXml
{
class Class1
{

C++XML文件例子

C++XML文件例子

C++XML文件例子一、1。

写一个xml文件<?xml version="1.0" encoding="utf-8" ?>- <root>- <user id="101"><name>abc</name><password>abc</password></user>- <user id="102"><name>ccc</name><password>ccc</password></user></root>2。

新建一个vc++2005工程可以是对话框工程因为只是举例说明(1)在对话框的.H文件添加#import "msxml3.dll"using namespace MSXML2;(2)在初始化函数里添加try{CoInitialize(NULL);//初始化COM组件MSXML2::IXMLDOMDocumentPtr pDoc;HRESULThr=pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument)) ;//创建一个COM进程if(!SUCCEEDED(hr)){AfxMessageBox(_T("FAILSE"),MB_OK,NULL);}pDoc->load("d:\\user.xml");//xml文件的地址我放在D盘下了也可以写成相对地址MSXML2::IXMLDOMNodeListPtr pNodeList=NULL;//定义节点列表pNodeList=pDoc->selectNodes("root/user");//选择节点MSXML2::IXMLDOMNodePtr pSubNode;CString strTemp;for(int i=0;i<(pNodeList->Getlength());i++)//判断有几个节点{pSubNode=pNodeList->nextNode()->selectSingleNode("na me");_bstr_t strRequestType=pSubNode->Gettext();strTemp=strRequestType.operator char*();AfxMessageBox(strTemp,MB_OK,NULL);}}catch (...){AfxMessageBox(_T("异常"));}二、#include <msxml6.h>#include <comutil.h>#pragma comment(lib, "comsuppwd.lib")void CXmlSampleDlg::OnBnClickedButton1()//按钮事件{CoInitialize(NULL);CComPtr<IXMLDOMDocument> spXmldoc;HRESULT hr = spXmldoc.CoCreateInstance(L"MSXML2.DOMDocument.6.0");if(SUCCEEDED(hr)){VARIANT_BOOL isSuccessFul;CComVariant varXmlFile(L"a.xml");spXmldoc->put_async(VARIANT_FALSE);HRESULT hr= spXmldoc->load(varXmlFile, &isSuccessFul);if(isSuccessFul==VARIANT_TRUE){CComBSTR bstrXml;CComPtr<IXMLDOMElement> spRoot=NULL;CComPtr<IXMLDOMElement> spTheBook=NULL;CComPtr<IXMLDOMElement> spTheElem=NULL;CComPtr<IXMLDOMNode> spNewNode=NULL;hr = spXmldoc->get_documentElement(&spRoot);spRoot->get_xml(&bstrXml);AfxMessageBox(L"1, 原始的XML");AfxMessageBox(bstrXml);spXmldoc->createElement(L"book", &spTheBook);spXmldoc->createElement(L"name", &spTheElem); spTheElem->put_text(L"新书");spTheBook->appendChild(spTheElem, &spNewNode); spTheElem.Release();spNewNode.Release();spXmldoc->createElement(L"price", &spTheElem); spTheElem->put_text(L"20");spTheBook->appendChild(spTheElem, &spNewNode); spTheElem.Release();spNewNode.Release();spXmldoc->createElement(L"memo", &spTheElem); spTheElem->put_text(L"新书的更好看。

C中对XML文件的操作

C中对XML文件的操作

Xml作为一‎个非常重要的‎纯文本格式已‎经进入了编程‎的很多领域,作为一个面向‎应用层面的c‎#也一样在很多‎领域离不开X‎m l。

但是,c#在很多方面对‎X ml做了写‎封装,以至于很多操‎作Xml的代‎码,都不需要手动‎去写。

例如,c#写WebSe‎r vice这‎种需要大量操‎作Xml的服‎务,除了极其个别‎的情况下,基本看不到任‎何操作Xml‎的代码。

这是c#的一个优势,但是,最近发现正是‎这样一些c#的优势,导致了新一代‎c#程序员的能力‎退化。

因为90%的情况下,不需要手动操‎作Xml,所以,年轻的c#程序员也觉得‎没必要为了这‎10%的情况,而去学如何手‎工读写Xml‎。

真不知道,ms 提供了这‎么简便的工具‎,是ms做的善‎事还是作的孽‎。

好吧,废话就不说了‎,转入主题。

1.如何用Xml‎Dom的方式‎读取XmlXml Dom方式是‎最原始的一种‎操作Xml的‎途径,从.net Framew‎o rk 1.0开始就开始‎支持Dom方‎式。

1.1如何以Do‎m方式加载X‎m l要读取Xml‎首先要加载X‎m l,加载的方式有‎两种,一种是从流或‎类似的Rea‎d er加载,例如:当然还可以从‎字符串加载:1.1读取无na‎m espac‎e的XmlXml已经准‎备好了,下面就开始读‎取这个Xml‎。

现在希望读取‎d ata节下‎面的所有it‎e m中的te‎x t,那么就可以:看看运行结果‎:但是,这样写的问题‎有很多,例如在dat‎a节点中有非‎i tem的节‎点,这样访问,也就被无差别‎的把非ite‎m项也写出来‎了。

例如把如果数‎据改成这样:这样,在data节‎里面,除了4个it‎e m,还有一个ot‎h er,这个othe‎r是不需要的‎,必须被排除掉‎,如果直接用第‎一中Chil‎d Nodes‎去访问的话,会得到这样的‎结果:显然“!@#”也被选择出来‎了,这可不是我们‎所期望的,所以,改用XPat‎h的方式访问‎:其运行结果为‎:很好的oth‎e r项排除在‎需要的节点外‎,这才是我们真‎正想要的结果‎:)1.2读取有na‎m espac‎e的Xml和c#一样Xml也‎有names‎p ace,并且name‎s pace在‎X ml中的作‎用巨大,也许你并未感‎受到name‎s pace的‎作用,但是,你可能已经不‎得不面对那些‎有names‎p ace的X‎m l了。

c++读取处理xml文件的实例

c++读取处理xml文件的实例

c++读取处理xml文件的实例C++ 作为一种强大的编程语言,可以用来读取和处理 XML 文件。

XML(可扩展标记语言)是一种常见的文本格式,用于存储和传输数据。

在 C++ 中,你可以使用许多库和工具来读取和处理 XML 文件,其中包括 Xerces-C++、TinyXML、RapidXML 等。

下面我将以使用RapidXML 库为例,展示一个简单的 C++ 代码来读取和处理 XML 文件。

首先,你需要在你的 C++ 项目中包含 RapidXML 库的头文件,并链接相应的库文件。

接下来,你可以使用 RapidXML 的 API 来打开 XML 文件、解析其中的内容并对其进行操作。

下面是一个简单的示例代码:cpp.#include <iostream>。

#include <fstream>。

#include "rapidxml.hpp"int main() {。

// 读取 XML 文件。

std::ifstream file("example.xml");std::stringxml_content((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());// 解析 XML 内容。

rapidxml::xml_document<> doc;doc.parse<0>(&xml_content[0]);// 获取根节点。

rapidxml::xml_node<> root_node = doc.first_node();// 遍历子节点并处理数据。

for (rapidxml::xml_node<> node = root_node->first_node("item"); node; node = node->next_sibling("item")) {。

C语言处理xml文件的库

C语言处理xml文件的库

C语⾔处理xml⽂件的库读取和设置xml配置⽂件是最常⽤的操作,试⽤了⼏个C++的XML解析器,个⼈感觉TinyXML是使⽤起来最舒服的,因为它的API接⼝和Java 的⼗分类似,⾯向对象性很好。

TinyXML是⼀个开源的解析XML的解析库,能够⽤于C++,能够在Windows或Linux中编译。

这个解析库的模型通过解析XML⽂件,然后在内存中⽣成DOM模型,从⽽让我们很⽅便的遍历这棵XML树。

DOM模型即⽂档对象模型,是将整个⽂档分成多个元素(如书、章、节、段等),并利⽤树型结构表⽰这些元素之间的顺序关系以及嵌套包含关系。

如下是⼀个XML⽚段:<Persons><Person ID="1"><name>周星星</name><age>20</age></Person><Person ID="2"><name>⽩晶晶</name><age>18</age></Person></Persons>在TinyXML中,根据XML的各种元素来定义了⼀些类:TiXmlBase:整个TinyXML模型的基类。

TiXmlAttribute:对应于XML中的元素的属性。

TiXmlNode:对应于DOM结构中的节点。

TiXmlComment:对应于XML中的注释TiXmlDeclaration:对应于XML中的申明部分,即<?versiong="1.0" ?>。

TiXmlDocument:对应于XML的整个⽂档。

TiXmlElement:对应于XML的元素。

TiXmlText:对应于XML的⽂字部分TiXmlUnknown:对应于XML的未知部分。

TiXmlHandler:定义了针对XML的⼀些操作。

智能文档内容XML的XSLT利用

智能文档内容XML的XSLT利用

智能文档内容XML的XSLT利用一.前言智能文档内容XML是利用智能文档的格式化全文信息即OpenXML,进行二次解析,获得内部定义的一个结构化描述的XML内容,结构化描述只是一切的开始,智能文档的应用同时还需要解决以下4个基础性问题:●信息集成●结构化描述●长期存储●安全控制通过ZLBH的数据、权限管理结合Oracle XML 数据库技术已经很好的解决了以上的问题。

在此基础上,还要对结构化描述的数据进行深层次的利用,比如说:●检索/抽取●转换●多数据源集成上面的“检索/抽取“通过Oracle XML DB的Xquery查询可以实现,”转换“和”多数据源集成“这两项应用就需要通过XLST的运用了。

本文将就智能文档的内容XML的XSLT转换的应用进行简述。

二.智能文档内容XML结构智能文档内容XML结构如下:通常一篇智能文档实例根节点下通常包含以下几种类型节点1.页脚节点2.页眉节点3.提纲外的元素节点4.提纲内的元素节点5.提纲外文本节点6.段落节点7.表格/表格单元格(无限嵌套其他元素)8.数字签名节点下图为智能文档中一篇入院记录在Word中的显示效果,图中标出了对应XML节点在文档中显示的位置。

后面将通过XSLT的转换将此篇文档通过HTML转换成需要的格式,值得一提的是通过Word本身可以另存为HTML文件,但是其文档的排版内容转换的差强人意,不能达到满意的效果。

三.XLST转换就示例文档结构,实验通过XLST将内容XML的数据转换成HTML文档,目标是将内容XML定义的节点转换成HTML上可展示的部分,包括:页眉、页脚、提纲外文本、提纲外元素、表格、表格内提纲、签名节点。

最后的展示效果如下图:其中运用到XSLT和XPATH的基础内容,XSLT代码本身的编写用到了Stylus Studio 2010;XSLT部分1.XSLT顶层元素根元素<xsl:stylesheet>和<xsl:transform>都是根元素,完全没有区别<xsl:stylesheet version="1.0"xmlns:xsl="/1999/XSL/Transform"><xsl:transform version="1.0"xmlns:xsl="/1999/XSL/Transform">Version 指定了Xslt的版本,对应不同的版本所能使用的XPATH函数有不同●输出元素<xsl:output method="html" encoding="UTF-8"/>这里指示XSLT的输出为HTML文件,编码格式是UTF-8;xsl:output还可以是 text、xml;如果没有指定则是默认是xml2.<xsl:template>元素<xsl:template>是Xslt的基础元素,用于匹配指定节点时需要应用的规则,通过match属性用于将模板关联到某个XML元素上;注意:<xsl:template>不能嵌套使用!<xsl:template match="/ ">定义了整个文档;智能文档内容XML的根元素是doc,通过 <xsl:template match="doc">定义为doc根元素;注意:任何一个XLST文件至少要包含一个模板如果要将页眉节点作为上下文则为<xsl:template match="sdheader ">,表示从XML选取满足节点名称为sdheader的节点,在此上下文上操作页眉内的元素节点和文本节点,通过<xsl:apply-templates> 选择应用模板,例如选择所有页眉的元素节点:<xsl:template match="doc"><xsl:apply-templates select="sdheader/sdelement"/></xsl:template>或<xsl:template match="/"><xsl:apply-templates select="doc/sdheader/sdelement"/></xsl:template>注意:这里很有必要解释一下<xsl:apply-templates>和<xsl:template>的区别●xsl:template的作用是定义一个新模板。

c语言解析xml

c语言解析xml

c语言解析xml
c语言解析xml
根据导师的要求,要用C语言解析一个xml文件,用于对升级文件进行合法性判断,进而对软件进行升级。

上网搜了一些关于这方面的资料,发现有一些是用C++或Java等语言写的,当然也可以直接下载开源的'代码,也可以下载库文件直接使用。

但考虑到对xml文件解析其实用不到那么多功能,也考虑到硬件方面无法支持这么大的库文件。

因此,决定自己写一段代码用于解析简单的xml文件。

看了一些源代码,发现他们主要使用树型结构来实现对xml 的解析,由于能力有限吧,感觉很麻烦,可能占用内存也会很大,所以我苦苦思索了好久,决定使用递归的方法解析xml文件,每当解析出相应的数值时,可以立即对这些数值进行判定是否合法,如果合法的话,可以继续解析;如果不合法的话,就可以直接跳出。

对这个xml文件,我做了很严格的定义:
<主标签属性值1>
<子标签> 属性值2
<子标签>
<下级子标签>属性值3
在这里,可以在标签间的任何地方进行注释,但禁止在标签内部进行注释;标签可以有多层嵌套,但必须保证标签有结束标志,嵌套必须合法。

属性值的规定方面,可以正确的解析属性值2和属性值3,但不会解析属性值1,属性值1可以起到注释的作用。

下面贴出一些主要的代码:
首先读取xml文件:
【 c语言解析xml】。

利用CMarkup生成XML文件

利用CMarkup生成XML文件

创建一个XML文档对于创建一个XML文档,需要实例化一个CMarkup对象,并调用AddElem创建根元素。

.在这个位置,如果你调用AddElem("ORDER") ,你的文档会简单的装一个空ORDER元素<ORDER/>. 然后调用AddChildElem 在根元素的下面创建元素(例如:“进入”根元素内部,层次表示).下面的示例代码创建一个XML文档并返回它(的内容)到一个字符串中。

CMarkup xml;xml.AddElem( "ORDER" );xml.AddChildElem( "ITEM" );xml.IntoElem();xml.AddChildElem( "SN", "132487A-J" );xml.AddChildElem( "NAME", "crank casing" );xml.AddChildElem( "QTY", "1" );CString csXML = xml.GetDoc();这些代码产生了下面的XML,这个根结点是ORDER元素;注意它的开始标签<ORDER> 在开头,结束标签</ORDER>在结尾。

当一个元素是在一个父下面(深入或被包含),这个父元素的开始标签要在它之前,结束标签要在它之后。

ORDER元素包含一个ITEM元素,而ITEM元素包含了三个字子元素:SN、NAME和QTY;<ORDER><ITEM><SN>132487A-J</SN><NAME>crank casing</NAME><QTY>1</QTY></ITEM></ORDER>如例子中所显示的,你也能够在一个子元素下创建新元素,这需要调用IntoElem 移动你的当前主位置到当前子元素位置,然后你就可以在这下面增加一个子元素了。

印刷业智能印刷生产调度与质量控制方法研究考核试卷

印刷业智能印刷生产调度与质量控制方法研究考核试卷
A.分光光度计
B.光泽度计
C.厚度计
D.硬度计
(结束)
二、多选题(本题共20小题,每小题1.5分,共30分,在每小题给出的四个选项中,至少有一项是符合题目要求的)
1.智能印刷生产调度的目的是什么?()
A.提高印刷效率
B.降低生产成本
C.提升印刷质量
D.减少设备损耗
2.以下哪些因素会影响印刷生产的调度?()
7. ______是一种非接触式印刷技术,适合短版印刷和个性化印刷。
8.印刷质量控制中,______是一种常用的统计过程控制方法,用于监控印刷过程的质量波动。
9.智能印刷生产中,通过______可以对印刷设备进行远程监控,提高生产管理的实时性。
10.为了减少印刷过程中的纸张浪费,可以采用______技术进行印前打样。
A.调整油墨配方
B.校准印刷设备
C.更换纸张类型
D.优化印前文件
18.以下哪些是智能印刷系统中的常见软件工具?()
A.印前制作软件
B.生产调度软件
C.质量控制软件
D.财务管理软件
19.在智能印刷生产中,以下哪些环节可以实现远程监控?()
A.印刷设备状态
B.生产进度
C.质量检测结果
D.员工考勤
20.以下哪些措施可以提高印刷品的整体质量?()
C. HSV
D. HSL
5.以下哪种方法不适用于印刷生产过程中的调度优化?()
A.遗传算法
B.粒子群优化
C.线性规划
D.人工神经网络
6.在智能印刷生产中,哪项技术可以帮助减少纸张浪费?()
A.数码打样
B.虚拟打样
C.短版印刷
D.以上全部
7.智能印刷生产调度中,以下哪项不是提前排程的主要任务?()

C#的Windows编程中多语言的实现(使用XML文件)

C#的Windows编程中多语言的实现(使用XML文件)

C#的Windows编程中多语言的实现(使用XML文件)C#的Windows编程中多语言的实现(使用XML文件)2009-02-20 10:51实现多语言的方法是通过配置文件实现,通过从配置文件中读取资源,然后在显示窗口的时候,即Load()方法中,动态显示相应的选择语言。

下面是在C#的Windows编程中实现多语言的步骤:第一步:设置默认语言和修改默认语言我们定义了一个XML文件来存放默认语言,文件名为LanguageDefine.xml。

LanguageDefine.xml该文件只有一个DefaultLanguage属性,用于存放默认语言,需要注意的是这个属性要与语言配置文件中_后的字符串相同。

下面是用于读取默认语言和修改默认语言的函数:我们又用一个XML文件来存储要显示的语言的种类,和在特定的语言下语言选择下拉菜单的显示文字。

现我们只构造了两种语言,不过通过添加Item,我们可以很容易的实现增加一种语言的功能。

我们是通过一个ComboBox下拉菜单来实现多语言的选择的,当选择了相应的语言时,我们会把系统的默认语言,即LanguageDefine.xml中的语言改成所选的语言。

同时,系统马上重新Load(),以显示所选择的语言对应的界面。

ppConfig.xml相应的读取该配置文件的函数是:第三步:根据语言获取要显示页面的显示值通过上面的几步,我们可以在每个页面的Load()方法中,根据ReadDefaultLanguage()函数,获取这个页面的显示语言。

取得默认语言后,我们要该语言的资源文件中读取相应的资源。

该资源文件的格式如下(现只显示英文的资源文件,中文资源文件的格式与其相同,只是text中的值换成了相应的中文值):AppResource_EN.xml我们把一个窗体中要实现多语言显示的控件的名称全都放在<Controls></Controls>中,name指的是控件的Name属性,而text指的是控件的T ext属性。

c#操作xml之xmlReader

c#操作xml之xmlReader
网络错误503请刷新页面重试持续报错请尝试更换浏览器或网络环境
c#操作 xml之 xmlReader
xmlReader的名称空间using System.Xml;
xmlReader是通过流的方式来读取xml文件的内容
<?xml version="1.0" encoding="utf-8" ?> <!--<!-–This file represents a fragment of a book store inventory database-–>--> <bookstore>
string str = rdr.Value; } } } } }
通过设置断点会发现xmlReader是一步一步从xml中读取文件内容的,其中空格、注释等都会读取
<book genre="autobiography" publicationdate="1991" ISBN="1-861003-11-0"> <title>The Autobiography of Benjamin Franklin</title>
</bookstore>
可以通过下面方式来读取<title>元素中的内容
class Program {
static void Main(string[] args) {
XmlReader rdr = XmlReader.Create("books.xml"); while(rdr.Read()) {
if(rdr.NodeType == XmlNodeType.Text) {

c#操作xml文件

c#操作xml文件

c#操作xml⽂件using System.Xml;//初始化⼀个xml实例XmlDocument xml=new XmlDocument();//导⼊指定xml⽂件xml.Load(path);xml.Load(HttpContext.Current.Server.MapPath("~/file/bookstore.xml"));//指定⼀个节点XmlNode root=xml.SelectSingleNode("/root");//获取节点下所有直接⼦节点XmlNodeList childlist=root.ChildNodes;//判断该节点下是否有⼦节点root.HasChildNodes;//获取同名同级节点集合XmlNodeList nodelist=xml.SelectNodes("/Root/News");//⽣成⼀个新节点XmlElement node=xml.CreateElement("News");//将节点加到指定节点下,作为其⼦节点root.AppendChild(node);//将节点加到指定节点下某个⼦节点前root.InsertBefore(node,root.ChildeNodes[i]);//为指定节点的新建属性并赋值node.SetAttribute("id","11111");//为指定节点添加⼦节点root.AppendChild(node);//获取指定节点的指定属性值string id=node.Attributes["id"].Value;//获取指定节点中的⽂本string content=node.InnerText;//保存XML⽂件string path=Server.MapPath("~/file/bookstore.xml");xml.Save(path);//or use :xml.Save(HttpContext.Current.Server.MapPath("~/file/bookstore.xml"));⼆、具体实例在C#.net中如何操作XML需要添加的命名空间:using System.Xml;定义⼏个公共对象:XmlDocument xmldoc ;XmlNode xmlnode ;XmlElement xmlelem ;1,创建到服务器同名⽬录下的xml⽂件:⽅法⼀:xmldoc = new XmlDocument ( ) ;//加⼊XML的声明段落,<?xml version="1.0" encoding="gb2312"?>XmlDeclaration xmldecl;xmldecl = xmldoc.CreateXmlDeclaration("1.0","gb2312",null);xmldoc.AppendChild ( xmldecl);//加⼊⼀个根元素xmlelem = xmldoc.CreateElement ( "", "Employees", "") ;xmldoc.AppendChild ( xmlelem ) ;//加⼊另外⼀个元素for(int i=1;i<3;i++){XmlNode root=xmldoc.SelectSingleNode("Employees");//查找<Employees> XmlElement xe1=xmldoc.CreateElement("Node");//创建⼀个<Node>节点xe1.SetAttribute("genre","李赞红");//设置该节点genre属性xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性XmlElement xesub1=xmldoc.CreateElement("title");xesub1.InnerText="CS从⼊门到精通";//设置⽂本节点xe1.AppendChild(xesub1);//添加到<Node>节点中XmlElement xesub2=xmldoc.CreateElement("author");xesub2.InnerText="候捷";xe1.AppendChild(xesub2);XmlElement xesub3=xmldoc.CreateElement("price");xesub3.InnerText="58.3";xe1.AppendChild(xesub3);root.AppendChild(xe1);//添加到<Employees>节点中}//保存创建好的XML⽂档xmldoc.Save ( Server.MapPath("data.xml") ) ;//////////////////////////////////////////////////////////////////////////////////////结果:在同名⽬录下⽣成了名为data.xml的⽂件,内容如下,<?xml version="1.0"encoding="gb2312"?><Employees><Node genre="李赞红"ISBN="2-3631-4"><title>CS从⼊门到精通</title><author>候捷</author><price>58.3</price></Node><Node genre="李赞红"ISBN="2-3631-4"><title>CS从⼊门到精通</title><author>候捷</author><price>58.3</price></Node></Employees>⽅法⼆:XmlTextWriter xmlWriter;string strFilename = Server.MapPath("data1.xml") ;xmlWriter = new XmlTextWriter(strFilename,Encoding.Default);//创建⼀个xml⽂档 xmlWriter.Formatting = Formatting.Indented;xmlWriter.WriteStartDocument();xmlWriter.WriteStartElement("Employees");xmlWriter.WriteStartElement("Node");xmlWriter.WriteAttributeString("genre","李赞红");xmlWriter.WriteAttributeString("ISBN","2-3631-4");xmlWriter.WriteStartElement("title");xmlWriter.WriteString("CS从⼊门到精通");xmlWriter.WriteEndElement();xmlWriter.WriteStartElement("author");xmlWriter.WriteString("候捷");xmlWriter.WriteEndElement();xmlWriter.WriteStartElement("price");xmlWriter.WriteString("58.3");xmlWriter.WriteEndElement();xmlWriter.WriteEndElement();xmlWriter.Close();//////////////////////////////////////////////////////////////////////////////////////结果:<?xml version="1.0"encoding="gb2312"?><Employees><Node genre="李赞红"ISBN="2-3631-4"><title>CS从⼊门到精通</title><author>候捷</author><price>58.3</price></Node></Employees>2,添加⼀个结点:XmlDocument xmlDoc=new XmlDocument();xmlDoc.Load(Server.MapPath("data.xml"));XmlNode root=xmlDoc.SelectSingleNode("Employees");//查找<Employees>XmlElement xe1=xmlDoc.CreateElement("Node");//创建⼀个<Node>节点xe1.SetAttribute("genre","张三");//设置该节点genre属性xe1.SetAttribute("ISBN","1-1111-1");//设置该节点ISBN属性XmlElement xesub1=xmlDoc.CreateElement("title");xesub1.InnerText="C#⼊门帮助";//设置⽂本节点xe1.AppendChild(xesub1);//添加到<Node>节点中XmlElement xesub2=xmlDoc.CreateElement("author");xesub2.InnerText="⾼⼿";xe1.AppendChild(xesub2);XmlElement xesub3=xmlDoc.CreateElement("price");xesub3.InnerText="158.3";xe1.AppendChild(xesub3);root.AppendChild(xe1);//添加到<Employees>节点中xmlDoc.Save ( Server.MapPath("data.xml") );//////////////////////////////////////////////////////////////////////////////////////结果:在xml原有的内容⾥添加了⼀个结点,内容如下,<?xml version="1.0"encoding="gb2312"?><Employees><Node genre="李赞红"ISBN="2-3631-4"><title>CS从⼊门到精通</title><author>候捷</author><price>58.3</price></Node><Node genre="李赞红"ISBN="2-3631-4"><title>CS从⼊门到精通</title><author>候捷</author><price>58.3</price></Node><Node genre="张三"ISBN="1-1111-1"><title>C#⼊门帮助</title><author>⾼⼿</author><price>158.3</price></Node></Employees>3,修改结点的值(属性和⼦结点):XmlDocument xmlDoc=new XmlDocument();xmlDoc.Load( Server.MapPath("data.xml") );XmlNodeList nodeList=xmlDoc.SelectSingleNode("Employees").ChildNodes;//获取Employees节点的所有⼦节点foreach(XmlNode xn in nodeList)//遍历所有⼦节点{XmlElement xe=(XmlElement)xn;//将⼦节点类型转换为XmlElement类型if(xe.GetAttribute("genre")=="张三")//如果genre属性值为“张三”{xe.SetAttribute("genre","update张三");//则修改该属性为“update张三”XmlNodeList nls=xe.ChildNodes;//继续获取xe⼦节点的所有⼦节点foreach(XmlNode xn1 in nls)//遍历{XmlElement xe2=(XmlElement)xn1;//转换类型if(=="author")//如果找到{xe2.InnerText="亚胜";//则修改}}}}xmlDoc.Save( Server.MapPath("data.xml") );//保存。

用C#创建XML,XML格式化输出

用C#创建XML,XML格式化输出

⽤C#创建XML,XML格式化输出demo:XmlDocument doc = new XmlDocument();XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "GB2312", null);doc.AppendChild(dec);//创建⼀个根节点(⼀级)XmlElement root = doc.CreateElement("First");doc.AppendChild(root);//创建节点(⼆级)XmlNode node = doc.CreateElement("Seconde");//创建节点(三级)XmlElement element1 = doc.CreateElement("Third1");element1.SetAttribute("Name", "Sam");element1.SetAttribute("ID", "665");element1.InnerText = "Sam Comment";node.AppendChild(element1);XmlElement element2 = doc.CreateElement("Third2");element2.SetAttribute("Name", "Round");element2.SetAttribute("ID", "678");element2.InnerText = "Round Comment";node.AppendChild(element2);root.AppendChild(node);doc.Save(@"d:\bb.xml");Console.Write(doc.OuterXml);格式化输出函数:private static string formatXml(object xml){XmlDocument xd;if(xml is XmlDocument) {xd=xml as XmlDocument;}else{xd = new XmlDocument();xd.LoadXml(xml as string);}StringBuilder sb = new StringBuilder();StringWriter sw = new StringWriter(sb);XmlTextWriter xtw = null;try{xtw = new XmlTextWriter(sw);xtw.Formatting = Formatting.Indented;xtw.Indentation = 1;xtw.IndentChar = '\t';xd.WriteTo(xtw);}finally{if (xtw != null)xtw.Close();}return sb.ToString();}。

c生成excel文件的步骤

c生成excel文件的步骤

c生成excel文件的步骤以C语言生成Excel文件的步骤在C语言中,可以使用第三方库来生成Excel文件,比如libxlsxwriter和libxl等。

本文以libxlsxwriter为例,介绍如何使用C语言生成Excel文件的步骤。

1. 引入libxlsxwriter库需要在C源代码中引入libxlsxwriter库。

可以从官方网站下载该库的最新版本,并将其包含在项目中。

2. 创建一个新的Excel文件使用`workbook_new()`函数创建一个新的Excel文件。

该函数将返回一个指向新创建的Excel文件的指针。

3. 添加一个工作表使用`workbook_add_worksheet()`函数在Excel文件中添加一个新的工作表。

该函数接受两个参数,第一个参数是指向要添加工作表的Excel文件的指针,第二个参数是工作表的名称。

4. 在工作表中写入数据使用`worksheet_write_string()`函数将字符串写入工作表的单元格中。

该函数接受四个参数,第一个参数是指向要写入数据的工作表的指针,第二个参数是要写入的单元格的行号,第三个参数是要写入的单元格的列号,第四个参数是要写入的字符串。

5. 设置单元格的格式使用`worksheet_set_column()`函数设置单元格的格式。

该函数接受四个参数,第一个参数是指向要设置格式的工作表的指针,第二个参数是要设置格式的起始列号,第三个参数是要设置格式的结束列号,第四个参数是要设置的格式。

6. 保存Excel文件使用`workbook_close()`函数保存Excel文件并关闭它。

该函数接受一个参数,即要保存和关闭的Excel文件的指针。

下面是一个示例程序,演示了如何使用C语言生成一个包含数据和格式的Excel文件:```c#include <stdio.h>#include "xlsxwriter.h"int main() {// 创建一个新的Excel文件lxw_workbook *workbook = workbook_new("example.xlsx");// 添加一个工作表lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);// 在工作表中写入数据worksheet_write_string(worksheet, 0, 0, "Hello", NULL);worksheet_write_string(worksheet, 0, 1, "World", NULL);// 设置单元格的格式worksheet_set_column(worksheet, 0, 1, 10, NULL);// 保存Excel文件并关闭workbook_close(workbook);return 0;}```以上就是使用C语言生成Excel文件的步骤。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使用C++和XML建立智能文档(二)发布时间:2004.01.12 14:55来源:赛迪网作者:Mike Kelly,陶刚编译编者按:上一篇《使用C++和XML建立智能文档(一)》我们给读者介绍了智能文档的概念和如何开始建立智能文档.本篇接下来将做如下讲解:目录ISmartDocument接口教程属性包建立智能文档操作DLL安装智能文档解决方案ISmartDocument接口教程下一步是建立智能文档操作DLL并安装它。

在你编写智能文档操作处理程序DLL(它实现了ISmartDocument接口方法)之前,最好先了解一下这个接口。

当用户在文档中移动的时候,你的操作处理程序DLL将建立并管理一组出现在文档操作事务面板中的控件,允许你基于文档中的位置提供自定义的用户界面。

映射到文档的XML大纲元素定义了用户在文档中的位置。

XML元素应该指定给用户显示哪些控件。

图2显示了你可以建立的控件类型。

你将使用操作处理程序DLL中实现的ISmartDocument接口的方法建立这些控件。

当这些控件被激活的时候(例如进入了文本框或者点击了某个按钮),Office通过ISmartDocument接口方法调用你的自定义操作处理程序DLL代码。

图2.智能文档控件类型我把IsmartDocument接口的方法分为几类:配置方法,它为Office描述了建立在文档操作事务面板中的控件(图3);控件绘制时(draw-time)方法,它们作为控件调用并绘制在事务面板上(图4);修改通知方法,Office把它们作为文档操作事务面板控件调用,由用户维护(图5)。

图3. ISmartDocument接口配置方法图4. ISmartDocument接口控件绘制方法使用C++和XML建立智能文档(三) 发布时间:2004.01.13 10:35来源:赛迪网作者:Mike Kelly,陶刚编译编者按:上一篇《使用C++和XML建立智能文档(二)》我们给读者介绍了ISmartDocument 接口教程、属性包、建立智能文档操作DLL、安装智能文档解决方案 .本篇接下来将做如下讲解:目录访问智能文档内容调试智能文档DLL改变通知安全性生成状态报告生成状态报告访问智能文档内容为了能起到作用,你的智能文档操作DLL一般需要访问(并且可能修改)下层的Office 文档。

在例子中,它是Excel项目进程表电子表格。

为了这个目的,ISmartDocument的几个方法为你下层文档提供了一个IDispatch COM接口指针。

在Office上编写COM的人知道,Idispatch提供了进入Office对象模型的通道。

在Visual Basic中,使用Idispatch和类型库是相当自动化的,但是在C++中稍微复杂一些。

起先我准备使用#import指令,它允许Visual C++为类型库中的所有接口生成ATL智能指针包装。

但是要让它正确的编译需要做大量的工作,它常常提示有东西出错了。

果真,我找到了知识库文章“Office Application Remains in Memory After Program Finishes”,它描述了在Office类型库中使用#import指令所遇到的知名的问题以及相应的建议。

最后,我决定建立自己的类CexcelWorkbook来包装需要的Excel方法。

这个类继承自ATL模版CcomDispatchDriver,这使它相对容易通过IDispatch调用Excel对象模型上的方法。

使用CcomDispatchDriver的方法GetIDOfName,你可以得到一个给定的属性或方法(例如,Excel对象模型中的ActiveSheet的范围)的DISPID。

你一旦有了DISPID(为了效率更高,我在类中对它进行了缓冲处理),就可以使用某个其它的CcomDispatch方法(例如GetProperty或InvokeN,此处的N是参数的数量)访问对象模型中的属性和方法。

注意Exce Range值是作为VBA属性(而不是方法)暴露的,但是它也需要一个参数(范围地址)。

因为CcomDispatchDriver没有提供为GetProperty调用传递的参数的途径,我在自定义类(CExcelWorkbook)中实现了一个新的方法(GetProperty1),它用于处理这种情况。

调试智能文档DLL一切都在预料之中,在我尝试建立智能文档操作DLL的时候也没有出现异常。

我试图在Excel中附加一个XML大纲的时候,收到了一个错误信息“XML扩展包逻辑丢失或无效”。

为了调试这个错误,我首先使用ListDLLs(上的一个方便的工具)确定Excel是否载入了我的库,这样清单才能看起来足够好,它可以让Excel找到该DLL 的。

我退出Excel,接着修改了项目的Debugging属性(右键点击解决方案并选择“属性”)告诉Visual Studio使用Excel作为该DLL的EXE容器。

我浏览Excel.exe并选择它作为Command值。

接着,我按下Ctrl-B打开“New Breakpoints”对话框,在Function字段中输入DllMain,当出现“disambiguate symbol”窗口(显然有两个重载的DllMain函数)的时候选择了它们两个,通过这些操作在DllMain中设置了一个断点。

我的目的是当Excel第一次调用该DLL的时候得到控制权。

接着我按下F5,Excel启动了。

Visual Studio警告没有Excel 符号,但是我早就知道了。

我打开智能文档,使用Data | XML | XML Expansion Packs试图再次附加XML大纲。

Visual Studio同ATL生成的DllMain中的断点一起出现了。

这个时候我的目标是确定DLL中是否有方法、哪些方法被调用了。

我在自己的IsmartDocument接口实现中的所有方法上设置了断点,以确定它们其中的哪些被调用了。

实际上,有几个方法被调用了,并且通过逐步运行我找到了一个普通的索引问题,传递到get_SmartDocXmlTypeName的控件索引是从1开始的,但是C++代码把它处理为从0开始的,因此对最后一个元素的调用返回了E_INVALIDARG。

后来我给所有的接口方法的入口点添加了ATLTRACE2宏,使自己更容易知道正在调用什么、什么时候调用。

改变通知对于示例解决方案,我需要知道用户什么时候选择了电子表格的数据项区域中的某行,这意味着他希望编辑该事务的相关信息。

接着我从当前行中抓取信息并填充事务面板,允许他输入本周的工作和下一周的计划工作的相关信息。

当他改变了事务面板中的某些东西的时候,我将使用Excel对象模型把新的信息复制回原工作表行。

但是我如何知道什么时候选择了新的行?有一种比较复杂的解决方案,即使用Excel事件(在Visual Basic中容易,但是在C++中不是太容易),但是我发现这是没有必要的。

在Excel中无论选择什么时候发生了改变,都会调用IsmartDocument接口方法,因此无论什么事情,你仅仅需要改变通知。

通过更新每次改变后的进度表事务内部视图,我能够忽略行选择的变化。

安全性因为宏病毒和其它的脚本技术的恶意使用变得很普遍,Office在两个途径做了修改:通过提高默认的安全性设置,防止运行大多数没有签名的、潜在的恶意代码;通过增加安全性设置的数量,为即使没有数字签名的解决方案的运行提供了更多的管理权限。

这考虑了现实情况:很多Office解决方案(嵌入Word或Excel文档中的宏)都已经广泛的布署在大型组织中,要让它们完全安全将花费一定时间。

如果新版本Office突然要求所有的解决方案必须有数组签名(理想的解决方案),这将给很多组织带来布署方面的障碍。

但是,Office安全性设置的增加也使安全性更加复杂,在本文中我没有谈到这个主题。

应用于宏和插件程序的相同的Office安全性设置也可应用于智能文档。

这些设置包括:·用户宏的安全性设置(高、中或低,在Tools | Macro | Security中设置;默认的是高)。

·智能文档是否从可信(trusted)位置载入:可信的文件系统目录(例如每个用户的或工作组模版目录)、公司局域网上的Web服务器或可信的Internet站点。

·智能文档组件是否是数字签名的,如果是,发行人是否在Tools | Macro | Security | Trusted Publishers设置为可信发行人。

·是否在Tools | Macro | Security | Trusted Publishers中选择了“相信所有安装了的插件程序和模版”。

默认情况下,Tools | Macro | Security中的安全性层次被设置高,Office阻止任何没有数字签名的插件程序DLL(包含智能文档操作DLL)的载入。

上面列举的安全性设置的其它组合可以允许智能文档被载入(可能给用户显示一个安全性提示),但是保证组织中的安全性的最好途径仍然是使用从VeriSign或GTE CyberTrust得到的数字证书对所有的已布署的解决方案(包括智能文档组件)进行数字签名。

微软2003 智能文档SDK中的XMLSign.exe 工具可以用于对XML智能文档清单文件进行数字签名。

此外,如果某个Office智能文档解决方案是从Web服务器上运行的,微软Internet Explorer和Office安全性设置都会影响解决方案是否能运行。

如果服务器上的XML扩展包清单文件既不在Internet Explorer可信站点中,也不在局域网区域,就不会试图检索它,也不会给用户提示把该站点添加到Internet Explorer可信列表站点列表中。

如果XML扩展包清单文件位于可信的服务器或局域网上,清单是否被载入依赖于它是否签名了。

如果它是签名了的,并允许运行,它仍然受到用户Office安全性设置的约束。

在智能文档解决方案开发过程中,你可以通过编辑注册表的下述键下面的REG_DWORD值“DisableManifestSecurityCheck”激活或禁止XML扩展包清单文件安全性检查:如果它的值为1将禁止XML扩展包清单文件安全性检查,如果值为0就激活了它。

当你试图引用某个XML扩展包清单文件的时候,如果这个注册表设置是1(禁止安全性检查),将出现一个对话框警告用户禁止安全性是危险的。

它同时提供一个“确定”按钮,这个按钮允许你立即重新激活XML扩展包安全性检查。

你应该仅仅在开发解决方案的时候把开发计算机的注册表的这个值设置为1(这个时候每次编译每个组件后进行数字签名可能不方便),但是要确保在签名后的组件的最后测试中激活它。

相关文档
最新文档