zoukankan      html  css  js  c++  java
  • XPth和XSLT的一些简单用法

    (目的在于让大家知道有这个东西的存在)

    XPath:XML Path语言(Xpath)表达式使用路径表示法(像在URL中使用一样)来为XML文档的各部分寻址!

    关于XPath如何使用了,我们来看看!当然这里面的代码只是入门,更深层次的还待更进一步的了解和学习!

    既然是操作XML的那我们首先就需要一个xml文件!

    Student
    <?xml version="1.0" encoding="gbk"?>
    
    <school version="2.0">
    
             <class>
    
                       <names>计1</names>
    
                       <student types='1'>
    
                                <name>aa</name>
    
                                <sex>x</sex>
    
                                <age>21</age>
    
                       </student>
    
                       <student types='2'>
    
                                <name>bb</name>
    
                                <sex>y</sex>
    
                                <age>22</age>
    
                       </student>
    
                       <student types='3'>
    
                                <name>cc</name>
    
                                <sex>z</sex>
    
                                <age>23</age>
    
                       </student>
    
             </class>
    
             <class>
    
                       <names>计2</names>
    
                       <student types='4'>
    
                                <name>aaa</name>
    
                                <sex>x</sex>
    
                                <age>21</age>
    
                       </student>
    
                       <student types='5'>
    
                                <name>bbb</name>
    
                                <sex>y</sex>
    
                                <age>22</age>
    
                       </student>
    
                       <student types='6'>
    
                                <name>ccc</name>
    
                                <sex>z</sex>
    
                                <age>23</age>
    
                       </student>
    
             </class>
    
    </school>

    很简单的一个XML下面我们就多这个XML进行操作!通过XPATH方式来寻找对应的值!

    首先是建一个应用程序了,看代码

    View Code
    string filePath="Test.xml";
    
                //创建xml读取对象(文档对象)?
    
                XmlDocument xmlDoc=new XmlDocument();
    
                StreamReader sr = new StreamReader(filePath);
    
                //加载XML文件
    
                xmlDoc.Load(sr);
    
                string path = "*/*/*/*";      //寻址格式表达式?
    
                XmlNodeList list = xmlDoc.SelectSingleNode(path).ChildNodes;
    
                foreach (XmlNode node in list)
    
                {
    
                    MessageBox.Show(node.InnerText);
    
                }
    
                sr.Close();

     这比较简单!运行的结果就是第一个*号代表school,第二个*号代表class 第三个*号代表namesstudents 第四个*代码的就是name默认第一个!所以输出的值是aa!那么我们想输出属于计2班的第一个人的姓名怎么办?

    string path = "*/*/*[@types='4']/*";

    我们的表达式就要这样写了!我们要找到最后一个了

    string path = "*/*[last()]/*[last()]/*";

     还可以具体指定,比如我要知道第二个班级的第二个学生的姓名

    string path = "school/class[2]/student[2]/*[1]";    等同于

    string path = "*/*[2]/*[3]/*[1]";

    大家可能疑惑,*代码表的是下面所有的节点的第几个节点!而上面的是指定了是student节点的第二个节点了!

    道理到时相通的!知道了简单的语法了!其他的就好说了!

             其他的语法了我们就要问我们的MSDN了,我们在MSDN中搜索XPath就可以得到相关的语法知识了!所以XPath并没有想象中的那么难!还等什么大家动手试下吧!下面我们来看下XStl吧!也不是很难!

    XSLT:可扩展标记语言转换(XSTL)可以将源XML文档的内容转换为另一个格式或结构不同的文档。例如可以用XSTLXML转换为网站上使用的HTML或转换为只包含应用陈旭所需字段文档。

    首先我们用XSTL来做这样一件事,就是将一个XML中的数据转到HTML上面去

    我们用的还是上面刚用到的XML吧!我们只加一个节点就是学校名字

    <school version="2.0">

             <schName>school</schName>

             <class>

     我们来写XSL后缀的文件

    格式定义如下

    XSLT
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
    <xsl:template match="/">
    
    <HTML>
    
        <head>
    
            <title>name:<xsl:value-of select="school/schName"/></title>
    
        </head>
    
    <body>
    
        <table border='1'>
    
            <xsl:apply-templates/>
    
        </table>          
    
    </body>  
    
    </HTML>
    
    </xsl:template>
    
     
    
     
    
    <xsl:template match="school">
    
        <xsl:apply-templates select="class"/>
    
    </xsl:template>
    
     
    
    <xsl:template match="class">
    
         <tr>
    
             <td colspan='3'>class:<xsl:value-of select="names"/></td>
    
         </tr>
    
         <xsl:for-each select="student">
    
         <tr>
    
            <td>
    
                name:<xsl:value-of select="name"/>
    
            </td>
    
            <td>
    
                sex:<xsl:value-of select="sex"/>
    
            </td>
    
             <td>
    
                age:<xsl:value-of select="age"/>
    
            </td>
    
        </tr>
    
        </xsl:for-each>
    
    </xsl:template>
    
    </xsl:stylesheet>

    最开始就是一个头文件了!然后在就是一个模板定义了!/代表的是当前的要转换的XML

    然后紧跟着的就是HTML代码了!在接着就是title了!<xsl:value-of select="school/schName"/>这句话就是查询了值并显示了!怎么查询,就是按XPath的语法查询了!查询当前XML文本下school/schName的值了!

             然后在就是表格里面的值了一样的,因为我们知道XPth所以事情就好办多了!然后同样的是找到班级的值了!一个班级可能有很多人,我们要通过循环来找出班级里面的学生了!

    语言都是神奇的,XSTL中也有循环嘿嘿!<xsl:for-each select="student">select指的是要循环的节点了!恩OK了!现在XMLXSTL文件都写好!怎么转换了!我们用到

    View Code
    XslCompiledTransform trans = new XslCompiledTransform();
    
                trans.Load("books.xsl");
    
                trans.Transform("Test.xml", "out.html");

    Out.html不一定要是存在或不存在的!恩  运行OK看下效果图

    哈哈,OK!这就是XPathXSLT了!当然关于XSLT的语法还有很多,同样我们在MSDN中输入XSL就会出现很多像xsl:ifxsl:copy啊等一些语法元素了!网上也有很多相关的元素帮助说明!

    (ps:很早之前在空间写的文章,因为要为后面的文章作铺垫,所以提过来了)


    作者:Regicidegod
    出处:http://www.cnblogs.com/RegicideGod/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    JAXB注解 @XmlRootElement 及XML文件解析详解
    JAXB 实现java对象与xml之间互相转换
    MyBatis之ResultMap标签
    如何通过<include/>标签重用Mybatis的代码段
    @Component, @Repository, @Service的区别
    @repository的含义,并且有时候却不用写,为什么?
    浪潮启动元脑生态计划,聚焦计算机视觉、量化交易等基础应用
    初生牛犊不怕虎 造车新势力的硬核移动互联科技盘点
    注意,有场景的公司正在拿起AI武器
    机器人运动大赛8月落地嘉峪关,编程和军事成亮点
  • 原文地址:https://www.cnblogs.com/RegicideGod/p/2627436.html
Copyright © 2011-2022 走看看