首页登陆欢迎您!
首页登陆 > 编程 > php xml 入门上学材料_php手艺_脚本之家

php xml 入门上学材料_php手艺_脚本之家

时间:2019-12-16

思路:

1分钟快速生成用于网页内容提取的xslt,具体内容如下

起因: 今天做项目时遇到一个问题:需要动态更新主页上的图片,以示本站不是做完了就算了,是有人一直在维护。好了,需求有了,如何实现?! 我的想法如下: 图片存放位置:放在一个文件夹中;图片的类型:不能固定了,只要是图片就可以上传显示;图片名字:按原始名字有点不正规,应该重新命名一下。 显示的位置:这就需要对图片指定相应的id,这个id是固定的,要与图片一一对应。于是就有一个记录一一对应的关系文件,可以选择csv文件,选择数据库记录,最后决定选择xml,这个东西在学校一直没学懂,我一直回避使用这东西,怕麻烦。今天算是挑战一下,花了一下午时间,终于有所收获。 学习步骤: 明确目标: 1、理解xml的结构;2、如何动态建立xml文件;3、如何读取和修改xml文件 一、 xml的结构是树形结构: 这个好理解。简单写一个: 复制代码 代码如下: 1 pic 1 2 pic 2 3 pic 3 二、我使用的php创建: 1. 定义一个DOM对象: $dom = new DomDocument;

1.使用xslt样式,这样可以很好的和xml结合,做出漂亮的报告

1、项目背景

  1. 添加子元素:$dom->appendChild($dom->createElement 内存中的原型是: 继续往里边加子元素:*->appendChild($dom->createElement; 继续加: **->appendChild($dom->createElement; 不加子元素了,加节点: ***->appendChild) 上面的*代表上上一行的代码;这样一来就可以写成一行: $dom->appendChild($dom->createElement->appendChild($dom->createElement ->appendChild($dom->createElement->appendChild); 现在内存中应该是这样的:1 显然里要求还远,很容易看懵的。 因此一般这么写: $pictures = $dom->appendChild($dom->createElement; $picture = $pictures->appendChild($dom->createElement; $id = $picture->appendChild($dom->createElement; $id->appendChild); 下面还可以接着创建name节点: $name = $picture->appendChild($dom->createElement; $name->appendChild($dom->createNode; 接下来还要接着创建picture节点: $picture = $pictures->appendChild($dom->createElement; 其实这些麻烦的事可以写个for循环来实现。 生成xml文件: $dom->formatOutput = true;//设置格式化输出 $dom->save;//保存xml文件 三、读取xml文件。 1、还是定义一个DOM对象;$dom->new DomDocument(); 2、加载xml文件:$dom->load; 3、按照节点的名字取得节点集合:$dom->getElementByTagName; 这种方法有点麻烦,参考文件://www.jb51.net/article/25853.htm 不过有一种我喜欢的方法:simplexml_load_file; 此方法可以把xml文件的内容转换成对象的形式,使用"->"结和"[]"很容易去的xml的内容; 但是在开发中还是遇到了一点问题: 当执行:print_r;时输出的是一个 SimpleXMLElement 对象,([picture] => array[1]=>array; 再执行:print_r($xml->pictures->picture);输出的是n个分开的对象。 执行:print_r($xml->pictures->picture[0]->id);输出的还是一个对象。这就很不理解,应该是一个字符串。 最后网上说是“迭代对象”, 应该使用echo输出,print_r输出不准确。参考地址://www.jb51.net/article/25852.htm 当然也可以修改xml的值通过这个方法。 写的很烂,仅供本人备忘。

2.生成xml结构

在《Python即时网络爬虫项目说明》一文我们说过要做一个通用的网络爬虫,而且能节省程序员大半的时间,而焦点问题就是提取器使用的抓取规则需要快速生成。在python使用xslt提取网页数据一文,我们已经看到这个提取规则是xslt程序,在示例程序中,直接把一长段xslt赋值给变量,但是没有讲这一段xslt是怎么来的。

 

网友必然会质疑:这个xslt这么长,编写不是要花很长时间?

xslt样式是个很有意思,也很强大的,现在用的很多,很方便就能做出一个漂亮的报告,可以百度一下,语法相当简单,跟写html差不多的.

实际情况是,这个xslt是通过GooSeeker的MS谋数台的直观标注功能自动生成的,熟练的话1分钟就搞定了。

在这里可以定制好,我们要生成报告,是什么样子的,然后在从xml获取数据.

2、MS谋数台能做什么

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
 <html>
 <Head>
        <style type="text/css">

          body {
          background:#fff;
          margin:0;
          padding:40px 20px;
          font-family: "Arial", Arial, Sans-serif;
          font-size: 16px;
          color:#000;
          }

          table {
          margin:5px 5px 0;
          border:0px solid #222;
          font-size: 0.8em;
          }

          td {
          margin:5px 5px 0;
          padding:10px 10px 10px 10px;
          vertical-align:text-top;
          border:1px solid #222;
          border-width:1px 1px 1px 1px;
          }

          td.light {
          border:0px solid #222;
          }

          td.number {
          text-align:right;
          }

          td.status {
          text-align:right;
          vertical-align:text-bottom;
          }

        </style>


 </Head>
 <body>
   <!--OVER RESULT -->
   <xsl:variable name="OVER_STATUS" select="REPORT/OVER_STATUS"/>
   <xsl:variable name="STATUS" select="REPORT/LOG_ENTRY/STATUS"/>



   <h2>自动化测试执行报告</h2>
   <!--table -->
   <table border="1">
     <!--all result value-->
     <tr bgcolor="white" height = "35">
        <td>Overall Test Result</td>
        <td><xsl:value-of select="$OVER_STATUS"/></td>
        <td colspan="2"> </td>
     </tr>

     <tr bgcolor="#D8BFD8" height = "35">
       <th>执行时间</th>
       <th>单步结果</th>
       <th>响应CODE</th>
       <th>Response信息</th>
     </tr>



       <!--select font color -->
       <xsl:variable name="fontColor">
           <xsl:choose>
               <xsl:when test="$STATUS = FAILED or $STATUS = PASSED">
                   <xsl:text>white</xsl:text>
               </xsl:when>
               <xsl:otherwise>black</xsl:otherwise>
           </xsl:choose>
       </xsl:variable>

       <!--background color-->
       <xsl:variable name="backgroundColor">
           <xsl:choose>
               <xsl:when test="$STATUS = 'FAILED'">
                   <xsl:text>rgb(255,0,0)</xsl:text>
               </xsl:when>
               <xsl:when test="$STATUS = 'PASSED'">
                   <xsl:text>rgb(60,179,113)</xsl:text>
               </xsl:when>
               <xsl:otherwise>
                   <xsl:text>white</xsl:text>
               </xsl:otherwise>
           </xsl:choose>
       </xsl:variable>

       <!--log entry-->
       <xsl:for-each select = "REPORT/LOG_ENTRY">


           <tr>
               <td><xsl:value-of select="EXECUTION_TIME"/></td>
               <td bgcolor="{$backgroundColor}"><xsl:value-of select="STEP_RESULT"/></td>
               <td><xsl:value-of select="COMPONENT_NAME"/></td>
               <td><xsl:value-of select="STEP_DESCRIPTION"/></td>
           </tr>
       </xsl:for-each>

       <tr bgcolor="white">
           <font color="{$fontColor}">
               <td colspan="4">Overall Test Result:<xsl:value-of select="$OVER_STATUS"/></td>
           </font>
       </tr>
   </table>
 </body>
 </html>
</xsl:template>
</xsl:stylesheet>

MS谋数台有个图形化界面,把一系列html解析工具集成在一起,包括:

xml是要按照,xslt定制的结构进行生成,或者换句话说,xslt样式要按照xml结构去做

  • 基于直观标注自动生成XSLT
  • 即时测试XSLT的正确性
  • 树状的DOM结构展示
  • 剖析某个DOM节点的属性
  • 为DOM节点生成XPath,可选择定位到class、或者id、或者绝对定位
  • 根据xpath搜索DOM节点

xml结构

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

REPORT/LOG_ENTRY

3、用MS谋数台生成XSLT

REPORT下OVER_STATUS节点,这个是整个报告的结果,只有当所有条目为passed时才会为passed

假设我们要抓取论坛帖子列表,下面一步步讲解操作方法:
第一步,打开GooSeeker的MS谋数台,输入要抓取的网址
第二步,在MS谋数台的浏览器显示窗口里,直接选取要提取的内容,并且起个名字,点击确认

每个LOG_ENTRY节点,代表一行数据

图片 1

包括:

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

STATUS单行数据执行状态

图片 2

EXECUTION_TIME执行时间

通过以上的操作,不用编程,用图形化界面直接在页面上标注,1分钟就可以生成xslt

STEP_RESULT单步执行结果

4、怎样使用XSLT

COMPONENT_NAME组件名称,

在python使用xslt提取网页数据一文,我们把生成xslt作为一个字符串交给程序,给人感觉好像一下子回到了史前文明,前面讲的那么好,最后用了很原始的拷贝。其实不然,那个只是一个例子。在《python即时网络爬虫项目: 内容提取器的定义》一文已经初见端倪了,有多种注入xslt的方式,最自动化的方式是api,将在后续文章中详细讲解。

上一篇:python队列基本使用 下一篇:没有了