菜单

透过xml生成word文书档案

2019年4月7日 - 金沙编程资讯

一.利用xslt样式,那样能够很好的和xml结合,做出能够的告知

四、怎么样利用XSLT

Xml生成word总结

  
使用xml生成word的为主步骤在《使用xslt转化xml数据形成word文书档案导出.doc》中证实相比较清楚了。不过里面包车型客车底细尚未聊到,由此自身折磨了两日总算成功了。以下是作者在选择进程中遭逢的难题要点:

 

一,项目背景

在Python即时互连网爬虫项目表达一文大家说过要做叁个通用的网络爬虫,而且能节省程序员大半的时光,而难题难点就是提取器使用的抓取规则必要连忙转移。在python使用xslt提取网页数据一文,大家已经观察这些提取规则是xslt程序,在演示程序中,直接把一长段xslt赋值给变量,但是尚未讲那1段xslt是怎么来的。

网络好友自然会猜忌:那些xslt这么长,编写不是要花十分长日子?

实在情状是,那一个xslt是因此GooSeeker的MS谋数台的直观标注成效自动生成的,熟识的话1秒钟就解决了。

            #xml样式
            xlstNode = xmlD.createProcessingInstruction("xml-stylesheet","href=\"LOG.XSLT\" type=\"text/xsl\"")
            xmlD.appendChild(xlstNode)

201陆-0伍-2捌:V三.0,扩大第1章
201陆-05-26:V贰.0,增加补充文字表达

不要选别的namespace

金沙国际 1

log_03_doc.xml生成log_03.xslt时会弹出上述对话框,不要随便再选其余namespace。
生成的xslt截图

 

 金沙国际 2

 

金沙国际 3

借使再选中其它namespace,生成的xslt也不是大家要的。生成xslt截图

金沙国际 4

旗帜明显跟下边包车型地铁不等同。

 金沙国际 5

 

 金沙国际 6

 

 

 

二,MS谋数台能做哪些

MS谋数台有个图形化界面,把1雨后竹芽html解析工具集成在1道,包罗:
1)基于直观标注自动生成XSLT
2)即时测试XSLT的不错
三)树状的DOM结构展示
四)剖析某些DOM节点的性质
伍)为DOM节点生成XPath,可选用稳定到class、或许id、或然相对定位
6)根据xpath搜索DOM节点

MS谋数台界面分成三有的:DOM数窗口、内嵌浏览器窗口、工作台。在工作台上定义xslt转换规则。

 

上述正是本文的全体内容,希望对我们的上学抱有协理,也冀望我们多多支持脚本之家。

插入图片

要贯彻插入图片,需求修改log_03.doc.

金沙国际 7

再度生成log_03.xslt,并修改<ns0:image>节点。

壹、删除全数v:shapetype 节点

二、删除 
<w:binData节点中的数据,并添加<xsl:value-ofselect=”.”/>

金沙国际 8

修改之后

金沙国际 9

3、修改v:shape 节点,去掉 style 属性,增加xsl 节点,如下:

金沙国际 10

金沙国际 11

 

四、去掉w:pict 节点前边的带<xsl:value-ofselect=”.”/>的拥有节点

事例中去掉了之类代码:

<w:r>

         <w:t>

           <xsl:value-of select=”.” />

         </w:t>

  </w:r>

比方没做第陆步,则在word中会出现图片的2进制代码。

 

 

例子:

  QDomDocumentdom;

    QDomProcessingInstructionproc =

       dom.createProcessingInstruction(

       “xml”,

       “version=\”1.0\”standalone=\”no\””

       );

    dom.appendChild(proc);

 

    QDomElementr =dom.createElement(“log”);

    dom.appendChild(r);

    r.setAttribute(“xmlns”,”logs”);

    QDomElementuserNode =dom.createElement(“user”);

    r.appendChild(userNode);

    QDomTextuserTextNode =dom.createTextNode(“john”);

    userNode.appendChild(userTextNode);

 

    QDomElementloginNode =dom.createElement(“login”);

    r.appendChild(loginNode);

    QDomTextloginTextNode =dom.createTextNode(“2015-01-1811:10:12”);

    loginNode.appendChild(loginTextNode);

 

    QDomElementlogoffNode =dom.createElement(“logoff”);

    r.appendChild(logoffNode);

    QDomTextlogoffTextNode =dom.createTextNode(“2015-01-1813:10:12”);

    logoffNode.appendChild(logoffTextNode);

 

    QDomElementimageNode =dom.createElement(“image”);

    r.appendChild(imageNode);

    QStringpng;

    FILE*fpng =fopen(“2.jpg”,”rb”);

    if( fpng )

    {

       encode(fpng,png,0 );

       fclose(fpng );

    }

    imageNode.setAttribute(“style”,”width:300pt;height:300pt” );

    charszBuffer[256];

    //sprintf(szBuffer,”wordml://5.png”);

    imageNode.setAttribute(“key”,”2.jpg” );

    QDomTextlogonNodeTextNode =dom.createTextNode(png);

    imageNode.appendChild(logonNodeTextNode);

 

 

 

    QStringxml =dom.toString();

    QFilefile(“log.xml”);

    if(file.open(QIODevice::WriteOnly))

    {

       QTextStreamoutput( &file);

       output.setCodec(QTextCodec::codecForName(“UTF-8”));

       //QStringcontent = dom.toString();

       output<< xml;

       file.close();

    }

 

 

    QStringsrc =”msxsl.exe”;

    QStringsrc1 =”log.xml”;

    QStringsrc2 =”log_03.xslt”;

    QStringsrc3 =QString(“122″)+”.doc”;

 

    QProcess*proce =newQProcess( );

    QStringListargumentList;

    argumentList.append(src1 );

    argumentList.append(src2 );

    argumentList.append(“-o”);

    argumentList.append(src3 );

 

    proce->start(src, argumentList );

    bool ret =proce->waitForStarted( 5000 );

 金沙国际 12

5,文书档案修改历史

201陆-0五-贰陆:V2.0,增加补充文字表明
2016-05-28:V三.0,扩大第叁章

xml结构

2、MS谋数台能做什么样

务必利用word 200叁.

一.上面通过例子演示:

金沙国际 13

金沙国际 14

 

简单 的xml以及相应的xml框架

 

二.独家创设0三本子的word文档log_03.doc和o7版本的word文档log_0七.docx,并都应用以上生成的log.xsd框架

金沙国际 15

 

各自另存为log_03_doc.xml,log_07_doc.xml。

3.
用log_03_doc.xml,log_07_doc.xml生成xslt文件log_03.xslt和log_07.xslt。

金沙国际 16

 

log_03_doc.xml生成log_03.xslt时会弹出上述对话框,仅仅选中xml中钦命的namespace就能够了。

 金沙国际 17

 

log_07_doc.xml生成log_0柒.xslt时会弹出上述对话框,正是未有xml中钦点的namespace,全部无论怎么选,生成的xslt都不是我们想要的。

4,如何使用XSLT

在python使用xslt提取网页数据一文,大家把生成xslt作为三个字符串交给程序,给人觉得好像一转眼回到了史前文明,前面讲的那么好,最终用了很原始的正片。其实否则,那几个只是1个例证。在python即时网络爬虫项目:
内容提取器的定义一文已经初见端倪了,有三种注入xslt的章程,最自动化的章程是api,将在后续小说中详尽讲解。

#*_*coding:utf-8*_*

import xml.dom.minidom as xmlDoc
import os
import gl
import sys



class cREPORTXML(object):
    def __init__(self):
        self.__struct = self.createReportNode()

    #创建report节点
    def createReportNode(self):
        try:
            xmlD = xmlDoc.Document()

            #xml样式
            xlstNode = xmlD.createProcessingInstruction("xml-stylesheet","href=\"LOG.XSLT\" type=\"text/xsl\"")
            xmlD.appendChild(xlstNode)

            report = xmlD.createElement('REPORT')
            xmlD.appendChild(report)

            overStatus = xmlD.createElement('OVER_STATUS')
            overStatus.appendChild(xmlD.createTextNode('PASSED'))
            report.appendChild(overStatus)

            returnResult = []
            returnResult.append(xmlD)
            returnResult.append(report)
        except Exception,ex:
            return ex.message
        return returnResult


    def writeReport(self,execTime,stepResult,comName,stepDisc):
        #reportNodeList = self.createReportNode()

        entry = self.createLogEntry(self.__struct[0],execTime,stepResult,comName,stepDisc)
        self.__struct[1].appendChild(entry)
        self.writeXml(self.__struct[0],gl.reporterPath+'reportxml.xml')
        #self.writeXml(self.__struct[0],gl.reporterPath+'reportxml_%s.xml'%(gl.curTimeStr))
 #-------------创建xml格式-有多个相同的节点,并且该节点下有4个名称相同的子节点----------------
    def createLogEntry(self,docObj,executeTime,stepResult,componentName,stepDiscription):
        entry = docObj.createElement("LOG_ENTRY")

        status = docObj.createElement("STATUS")
        nodeExecuteTime = docObj.createElement("EXECUTION_TIME")
        nodeStepResult = docObj.createElement("STEP_RESULT")
        nodeComponentName = docObj.createElement("COMPONENT_NAME")
        nodeStepDiscription = docObj.createElement("STEP_DESCRIPTION")

        status.appendChild(docObj.createTextNode(stepResult))
        nodeExecuteTime.appendChild(docObj.createTextNode(executeTime))
        nodeStepResult.appendChild(docObj.createTextNode(stepResult))
        nodeComponentName.appendChild(docObj.createTextNode(componentName))
        nodeStepDiscription.appendChild(docObj.createTextNode(stepDiscription))

        entry.appendChild(status)
        entry.appendChild(nodeExecuteTime)
        entry.appendChild(nodeStepResult)
        entry.appendChild(nodeComponentName)
        entry.appendChild(nodeStepDiscription)
        return entry


    #参数,xml对象,准备存储xml文件路径,文件模式:读 and 写 (r and w)
    def writeXml(self,xmlDoc,xmlPath):
        f = open(xmlPath,"w")
        xmlDoc.writexml(f,indent='\t', addindent='\t', newl='\n', encoding="utf-8") #中间的加了一些格式符,这样生成的xml自动对齐格式
        f.close()




if __name__=='__main__':
    reportx =cREPORTXML()
    print  reportx.writeReport('20170602','PASSED','1-SETTEXT','AUTOMATION TEST')
    print  reportx.writeReport('20170606','FIELD','2-SETTEXT','AUTOMATION TEST')

一、项目背景

叁,用MS谋数台湾学生成XSLT

若果我们要抓取论坛帖子列表,上面一步步教师操作方法:

第一步,打开GooSeeker的MS谋数台,输入要抓取的网站
第二步,在MS谋数台的浏览器显示窗口里,直接选取要提取的剧情,并且起个名字,点击确认

金沙国际 18

第三步,点击工作台的“测试”按钮,xslt就生成了,在“数据规则”窗口突显出来

金沙国际 19

经过以上的操作,不用编制程序,用图形化界面直接在页面上标明,1分钟就足以生成xslt

xslt样式是个很有意思,也很有力的,未来用的很多,很有利就能做出一个赏心悦目的告知,能够百度时而,语法万分不难,跟写html大概的.

MS谋数台界面分成3片段:DOM数窗口、内嵌浏览器窗口、工作台。在工作台上定义xslt转换规则。

 生成xml具体python代码:

1经我们要抓取论坛帖子列表,上面一步步教学操作方法:
金沙国际,首先步,打开GooSeeker的MS谋数台,输入要抓取的网站
其次步,在MS谋数台的浏览器突显窗口里,间接采取要提取的始末,并且起个名字,点击确认

 用ie打开xml报告,当然能够旁观计算果突显有点难点,这几个不影响报告展现,代码中处理一下就好.

其三步,点击工作台的“测试”按钮,xslt就生成了,在“数据规则”窗口展示出来

二.因为大家要使用xslt样式,所以呢.

网络朋友自然会疑惑:那些xslt这么长,编写不是要花相当长日子?

 

其实况形是,这些xslt是经过GooSeeker的MS谋数台的直观标注作用自动生成的,纯熟的话1分钟就解决了。

STEP_RESULT单步执行结果

金沙国际 20

以下代码意思是:成立一个over_status的节点,节点文本为passed,然后,将此节点扩充到根节点REPOLANDT下

1秒钟火速变动用于网页内容提取的xslt,具体内容如下

            overStatus = xmlD.createElement('OVER_STATUS')
            overStatus.appendChild(xmlD.createTextNode('PASSED'))
            report.appendChild(overStatus)

三、用MS谋数台湾学生成XSLT

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图