OPENXML

    这几天一直在学习SQLSERVER2008,希望能把自己学到的一点东西整理出来,供自己没事的时候翻阅,如果也能偶尔照顾到某位程序员,那就更nice。

   XML作为数据传输一个非常优秀的应用,越来越受到业界的追捧。我们看到sqlserver从2000开始一直在增强其对xml的性能。在sqlserver2008中,有两个很重要的

语句或者函数:for xml,和openxml。这两个执行的功能却是刚好相反。For Xml 是将库中行集数据以XML形式展开,而openxml则是将XML形式的数据以传统的数据库

查询数据形式表现出来。

    OPENXML:Because openxml is a rowset provider,it can be used in the T-SQL statments in which rowset providers (table,view,opensetrow function can appear),so it provides a rowset view over the xml documents .

   最重要的功能就是说它能提供在XML文档上行集的视图。通俗讲就是通过XML,我们能得到一个行集的视图,然后在这个视图上为所欲为,干你想干的能干的事情。

了解了性质以后,我们再来看下它的语法:

        OPENXML( idoc int [ in] , rowpattern nvarchar [ in ] , [ flags byte [ in ] ] )

        [ WITH ( SchemaDeclaration | TableName ) ]:

     默认的openxml有3个参数,第一个参数是个int型的,来自于输入,一般通过执行EXEC SP_XML_preparedocument

    得到,他是通过执行这个存储过程,获得一个被处理的XML文档你想要的数据。第二个参数也是来自输入,指的是你要处理的节点。它通过第一个参数找到数据

中要处理的节点位置。第三个参数有四个值,分别是0,1,2,8.默认不写的话就为0,意思是以‘属性为中心’,通俗说就是处理你已经找到的节点的属性值。1也是这个意思。2表示以‘元素为中心’,通俗讲就是处理的节点子元素。所以这三个参数的意思是:第一个元素获得要处理的XML文档的内容,第二个节点获得内容中的节点,第三个内容是处理节点上的哪方面内容。

   with是可选项,也是指节点内容处理。有人会问那它跟上面的第三个属性有上面区别。区别在于第三个属性指定处理内容,with则具体指定了内容上的内容。

比如<Order OrderID='1' OrderDate ='2001-09-03'>,如果第三个属性指定为1,即处理属性中心,在with中可以写成with( OrderID varchar(20))或者with(OrderId varchar(20),OrderDate getdate()),指定它要获得哪个具体属性值。

   如果在第三个属性指定为2,则在with中表示获得子元素。
   如果要获得父类节点上的元素,则应该在with中使用@,形如:with(OrderID varchar(20) ‘.../@OrderID’

   

03-28
<think>好的,用户想了解OpenXML的使用教程或开发文档。首先,我需要整理关于OpenXML的基本信息和资源。OpenXML是微软Office文档的开放标准,基于XML,适用于Word、Excel、PPT等。用户提到的html2openxml和插入图片的引用可能需要关联到实际应用场景,比如将HTML转成Word文档或插入图片。 接下来,用户可能需要入门教程和官方文档。我记得微软有官方的OpenXML SDK文档,应该先推荐官方资源。然后是开发工具,比如Visual Studio的OpenXML SDK工具包,以及验证文档有效性的工具。 另外,用户可能对实际开发步骤感兴趣,比如如何创建文档、操作元素、处理图片等。需要分点说明,结构清晰。同时,结合用户提到的html2openxml项目,可以推荐相关的第三方库,比如OpenXML-PowerTools,这些能简化开发流程。 书籍推荐也是重要部分,O'Reilly的《Open XML Developer Guide》应该不错,但得确认是否有中文版。社区资源如Stack Overflow和GitHub上的项目可以提供实际帮助,需要包含进去。 最后,用户可能遇到常见问题,比如文档损坏或性能优化,需要给出解决方案。同时,生成的相关问题要覆盖基础概念、实际应用、工具选择等,帮助用户进一步探索。</think>### OpenXML 使用教程与开发文档指南 #### 一、OpenXML 基础概念 OpenXML 是基于 XML 的开放文件格式标准,用于表示 Word(.docx)、Excel(.xlsx)和 PowerPoint(.pptx)等 Microsoft Office 文档。其核心特点包括: 1. **结构化存储**:文档内容按层级结构存储为 XML 文件,压缩为 ZIP 格式 2. **跨平台支持**:可通过编程方式生成或修改文档,无需依赖 Office 软件[^1] 3. **标准化规范**:2015 年成为 ISO/IEC 29500 国际标准 #### 二、官方开发文档 1. **微软官方文档** - [OpenXML SDK 文档](https://docs.microsoft.com/en-us/office/open-xml/open-xml-sdk) - 包含 API 参考、代码示例和架构规范 - 提供 Word/Excel/PPT 的 XML 结构说明 2. **ECMA-376 标准文档** - 第五版下载地址:[ECMA International](https://www.ecma-international.org/publications/standards/Ecma-376.htm) - 包含完整的格式规范定义 #### 三、开发环境配置 ```csharp // 示例:通过 NuGet 安装 OpenXML SDK Install-Package DocumentFormat.OpenXml ``` 1. **开发工具** - Visual Studio(推荐 2019 或更新版本) - OpenXML SDK 2.5 Toolbox:用于反编译 Office 文档为 XML 2. **文档验证工具** ```bash # 使用 OpenXML 验证工具 OpenXmlValidator.exe MyDocument.docx ``` #### 四、基础开发流程(以 Word 为例) 1. **创建新文档** ```csharp using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing; var doc = WordprocessingDocument.Create("demo.docx", WordprocessingDocumentType.Document); var mainPart = doc.AddMainDocumentPart(); mainPart.Document = new Document(new Body(new Paragraph(new Run(new Text("Hello OpenXML"))))); doc.Save(); ``` 2. **插入图片(引用用户提到的资源[^2])** ```csharp ImagePart imagePart = mainPart.AddImagePart(ImagePartType.Jpeg); using FileStream stream = new FileStream("logo.jpg", FileMode.Open); imagePart.FeedData(stream); var drawing = new Drawing( new DW.Inline( new DW.Extent { Cx = 952500, Cy = 952500 }, new DW.EffectExtent(), new DW.DocProperties(), new DW.NonVisualGraphicFrameDrawingProperties(), new Graphic( new GraphicData( new Picture( new NonVisualPictureProperties(...), new BlipFill(...), new ShapeProperties(...) ) { Uri = "http://schemas.openxmlformats.org/drawingml/2006/picture" } ) ) ) ); ``` #### 五、进阶学习资源 1. **书籍推荐** - 《Open XML Developer Guide》(O'Reilly) - 《Professional Office Development with Open XML》 2. **实用工具集** - [OpenXML-PowerTools](https://github.com/OfficeDev/Open-Xml-PowerTools):提供高级文档处理功能 - [Html2OpenXml](https://github.com/onizet/html2openxml):实现 HTML 到 OpenXML 的转换(如用户引用的资源) 3. **在线学习平台** - Microsoft Learn 模块:[处理 Office 文档](https://learn.microsoft.com/zh-cn/training/modules/dotnet-create-open-xml-documents/) - Pluralsight 课程:OpenXML 开发实战 #### 六、常见问题解决方案 1. **文档损坏问题** - 使用 `OpenXmlValidator` 检测格式错误 - 添加正确的命名空间声明: ```xml <w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"> ``` 2. **性能优化** - 使用 `OpenSettings` 控制内存使用: ```csharp var settings = new OpenSettings { AutoSave = true }; using var doc = WordprocessingDocument.Open(filePath, true, settings); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值