[经验总结]XSLT开发总结

2024-03-30 23:38

本文主要是介绍[经验总结]XSLT开发总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    注意XSLT不能对输入文档的DOM树进行更改
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
    1 循环 for-each
    xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="text" indent="no"/>
    
        <xsl:template match="a">
            <xsl:for-each select="./node()">
                <xsl:choose>
                    <!--Text node -->
                    <xsl:when test="./self::text()">StartATag<xsl:copy select="."/>EndATag</xsl:when>
    
                    <!--Element node-->
                    <xsl:when test="./self::*">StartBTag<xsl:copy-of select="./node()"/>EndBTag</xsl:when>
                </xsl:choose>
            </xsl:for-each>
        </xsl:template>
    
    </xsl:stylesheet>

==================================================================

    2 div 定义元素与属性
                  
    <xsl:element name="div">
                                                   <xsl:attribute name="type"><xsl:text>maintitle</xsl:text></xsl:attribute>
                                                   <xsl:attribute name="name"><xsl:value-of select="./PAM_Attributes/PAM_Attr[@name='tqID']/@value"/></xsl:attribute>
                                                   <xsl:attribute name="class"><xsl:text>maintitle</xsl:text></xsl:attribute>
                        <xsl:copy-of select="./PAM_Attributes/following-sibling::*"/>
                                         </xsl:element>
 
==================================================================

    3 在XSLT中操作多个XML文件
    <xsl:variable name="docs1" select="document('./file1.XML')"/>
    <xsl:copy-of select="$docs1"/>
    
    <xsl:variable name="docs2" select="document('./file2.XML')"/>
    <xsl:copy-of select="$docs2"/>
 
==================================================================

    4 无穷递归 错误提示
    The XSL processor stack has overflowed - probable cause is
    infinite template recursion.

==================================================================

    5 变量算术操作示例
    <xsl:value-of select="$nsLength*10"/>
 
==================================================================

    6 xslt模板 参数 param  
    <?xml version="1.0" encoding="UTF-8" ?>
      <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:param name="Key1"/>
      <xsl:param name="Path"/>
 
==================================================================
    7  Makefile for xsltproc
    # For XSLT
    PARSE = xsltproc
    SRC = main1.xml
    STYLESHEET = ../../xsl/makepaper.xsl
    OUTPUT = ../../output.html
    
    
    all :  $(SRC) $(STYLE)
             $(PARSE)  $(STYLESHEET) $(SRC) > $(OUTPUT)  
    
    clean:
             del $(OUTPUT)
 
==================================================================

    8 libxslt库辅助工具xlstproc 用法示例
    带参数的xslt para xslt
    WURFL XSLT Tools
    by Roland Guelle
    
    The WURFL information is stored in XML. So the simpliest way to manipulate and transformm WURLF is XSLT.
    If you have ideas or own XSLT, your help is welcome :)
    
    These stylesheets are tested with xsltproc from the package libxslt. I only use this on the command line, if you need a GUI - there are lot of tools that helps you working with XSLT.
    Some exslt extensions are used, so please check if your XSLT processor supports this.
    
    If you have never worked with a XSLT processor or the command line before, add to WURFL and open the file with Firefox.
    
    Available XSLTs
    
    patch_wurfl.xsl
    Patch WURFL with your own devices, groups and capabilities.
    Example:
    run: xsltproc --stringparam 'file' "your_patch_file" patch_wurfl.xsl wurfl.xml > wurfl_patched.xml
    If you like to format the output (with xmllint):
    run: xsltproc --stringparam 'file' "your_patch_file" patch_wurfl.xsl wurfl.xml | xmllint --format - > wurfl_patched.xml
    If you like to format the output (with tidy):
    run: xsltproc --stringparam 'file' "your_patch_file" patch_wurfl.xsl wurfl.xml | tidy -config tidy_config - > wurfl_patched.xml
    
    check_wurfl.xsl
    Checks your patched/modified WURFL consistency if:
    id attribute is present and unique
    user_agent attribute is present and unique
    fall_back is available and could be resolved
    
    Example:
    run: xsltproc check_wurfl.xsl wurfl.xml
    
    roll out XSLT
    Resolve WURFL fallbacks for all values and capabilities defined in roll_out_capabilities.xml.
    Check the parameters in the XSLT for more options.
    roll_out_into_txt.xsl
    Create text (maybe CSV compatible) version of WURFL.
    Example:
    run: xsltproc roll_out_into_txt.xsl wurfl.xml > wurfl.txt
    roll_out_into_xml.xsl
    Create a flat WURFL version, with each capability as device attribute SQL.
    Example:
    run: xsltproc roll_out_into_xml.xsl wurfl.xml > flat_wurfl.xml
    roll_out_into_sql.xsl
    Create SQL statements for insert WURFL into a SQL database.
    If you like, you can also generate the create statement with this script (default).
    Example:
    run: xsltproc roll_out_into_sql.xsl wurfl.xml > wurfl.sql
    
    remove_elements.xsl
    WURFL lists many capabilities and groups. If you don't need each of these elements, you will find this tool really useful.
    Create a small XML listing the unwanted groups, run the XSLT and you'll get a new WURFL without the groups and the capabilities that you have selected. This should help you keep WURFL smaller and make your applications faster.
    Example:
    edit remove_elements.xml
 
          <?xml version="1.0" encoding="UTF-8"?>
          <elements>
          <groups>
            <group>wta</group>
            <group>object_download</group>
            <group>streaming</group>
            <group>wap_push</group>
            <group>j2me</group>
            <group>mms</group>
            <group>sms</group>
            <group>sound_format</group>
          </groups>
          <capabilities>
            <capability>tiff</capability>
          </capabilities>
          </elements>
      
 
    run: xsltproc --stringparam 'file' "remove_elements.xml" remove_elements.xsl wurfl.xml > clean_wurfl.xml
    
    Some (maybe) outdated stylesheets:
    get_capabilities.xsl
    Get capabilities without groups from WURFL for selected user agent.
    Example:
    run: xsltproc --stringparam 'ua' "Nokia3650" get_capabilities.xsl wurfl.xml
    
    convert_wurfl_markups.xsl
    Convert the WURLF markups to the 'old' names.
    The markup names have changed from wml11 to wml_1_1 standard.
    If you don't want to change your application, you can use this XSLT to transform the names into the old format.
    Example:
    run: xsltproc convert_wurfl_markups.xsl wurfl.xml > wurfl_converted.xml
    
    count_useragents.xsl
    Answers your question "how many useragents/capabilities are stored in WURFL?"
    Example:
    run: xsltproc count_useragents.xsl wurfl.xml
    
    convert_2_html.xsl
    Create an HTML page from the WURFL.xml
    Example:
    run: xsltproc convert_2_html.xsl wurfl.xml > wurfl.html
 
==================================================================

    9 XSLT 2.0 使用 XPath 2.0 和 XSLT 2.0 节省开发时间并减少代码量
 
    http://www.ibm.com/developerworks/cn/xml/x-xslt20xpath20/
 
==================================================================
10 XSLT中模拟 map与 固定次数的循环
    <!--将数字转换成字母 以用作选项-->
    <xsl:template name='digital2letter'>
      <xsl:param name='digit' select='0'/>
      <xsl:choose>
        <xsl:when test='$digit = 0'>A</xsl:when>
        <xsl:when test='$digit = 1'>B</xsl:when>
        <xsl:when test='$digit = 2'>C</xsl:when>
        <xsl:when test='$digit = 3'>D</xsl:when>
        <xsl:when test='$digit = 4'>E</xsl:when>
        <xsl:when test='$digit = 5'>F</xsl:when>
        <xsl:when test='$digit = 6'>G</xsl:when>
 
        <xsl:otherwise><p>Error Choice</p></xsl:otherwise>
      </xsl:choose>
    </xsl:template>
 
 
         <xsl:template name="AddGeneralChoises"> 
                   <xsl:param name="QuestionID"/>        
                   <xsl:param name="level" select="0" /> <!--递归深度-->
 
 
        <xsl:if test="$level &lt; 6"> <!--固定添加六个选项-->
            <xsl:variable name="choiceLetter">
                <xsl:call-template name="digital2letter"> 
                    <xsl:with-param name="digit" select="$level"/>
                </xsl:call-template>
            </xsl:variable>
 
            <xsl:element name="input">
                <xsl:attribute name="type">radio</xsl:attribute>
                <xsl:attribute name="name"><xsl:value-of select="$QuestionID"/></xsl:attribute>
                <xsl:attribute name="choice"> <xsl:value-of select="."/> </xsl:attribute>
                <xsl:attribute name="onfocus"><xsl:text>blur()</xsl:text></xsl:attribute>
            </xsl:element>
 
            <xsl:value-of select="$choiceLetter"/>
            <xsl:text>  </xsl:text>
 
            <xsl:variable name="levelPlus" select="$level + 1" />
 
            <xsl:call-template name="AddGeneralChoises"> <!--XSLT 1.0不支持固定循环次数的for-each,只能用递归模拟循环-->
                <xsl:with-param name="QuestionID" select="$QuestionID"/>
                <xsl:with-param name="level" select="$levelPlus"/>
            </xsl:call-template>
 
        </xsl:if>
 
    </xsl:template>

==================================================================

    15 xslt  输出方法  outmethod 很重要
      标准文档: http://www.w3.org/TR/xslt#section-XML-Output-Method
      同样一个<b/>  html输出成<b></b>  xml输出成<b/>

==================================================================

    16  xslt output method引起的网页显示问题。
 
      环境:Windows XP SP3 + IE 8.0
    
     xslt:      
      makepaper.xsl:  <xsl:output method="xml" encoding="utf-8" omit-xml-declaration="yes" indent="yes"/>
    
      mainbody.html:  <html>
    
      问题:  <br />输成<br/>  IE8对<br/>当成<br>解析,导致<br/>后面的文字都变成黑体。
    
      将<xsl:output method="xml" />改为<xs:output method="html" />
      出现新问题,图片不显示,图片链接中的汉字为乱码:
        file:///E:/%25E5%25B1%25B1%25E8%25A5%25BF%25E5%2585%2589%25E7%259B%2598/web/data/demo/image/image2.jpeg
    
      file:///E:/光盘/web/data/demo/image/image2.jpeg
    
      最终解决办法:
        更改mainbody.html: 为xhtml格式
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
        "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    
      xsl的输出格式为xml,xhtml中能正确解析 <br/>而不是将之当成<br>处理。

==================================================================

    17 处理文本结果的技巧
         <xsl:template match="text()">
            <xsl:variable name="parentName" select="name(..)" />
 
            <xsl:if test='$parentName != "OOXML"'> <!--过滤OOXML的信息-->
                <xsl:copy-of select="."/>
            </xsl:if>
         </xsl:template>
==================================================================

    18  XSLT 判断XML结点的类型 XSLT

    <?xml version="1.0"?>
    <!--以下代码摘自XSLTSL工程-->
    <!--在XSLT中判断XML文档的结点类型 -->
    
    <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:doc="http://xsltsl.org/xsl/documentation/1.0"
        xmlns:node="http://xsltsl.org/node"
        extension-element-prefixes="doc node">
    
      <xsl:template name="node:type">
        <xsl:param name="node" select="."/>
    
        <xsl:choose>
          <xsl:when test="not($node)"/>
          <!--运用了self轴-->
          
          <xsl:when test="$node[1]/self::*">                     <!--元素结点-->
               <xsl:text>element</xsl:text>
          </xsl:when>
    
          <xsl:when test="$node[1]/self::text()">                <!--文本结点-->
               <xsl:text>text</xsl:text>
          </xsl:when>
    
          <xsl:when test="$node[1]/self::comment()">             <!--注释结点-->
               <xsl:text>comment</xsl:text>
          </xsl:when>
    
          <xsl:when test="$node[1]/self::processing-instruction()">  <!--处理指令结点-->
        <xsl:text>processing instruction</xsl:text>
          </xsl:when>
          <xsl:when test="not($node[1]/parent::*)">                  <!--根结点-->
            <xsl:text>root</xsl:text>
          </xsl:when>
    
          <!--下面两种类型的判断巧妙运用了集合的概念-->
          <xsl:when test="count($node[1] | $node[1]/../namespace::*) = count($node[1]/../namespace::*)">
            <xsl:text>namespace</xsl:text>
          </xsl:when>
    
          <xsl:when test="count($node[1] | $node[1]/../@*) = count($node[1]/../@*)">
            <xsl:text>attribute</xsl:text>
          </xsl:when>
    
        </xsl:choose>
      </xsl:template>
    
    </xsl:stylesheet>

==================================================================

    9 在XSLT载入XML文档,注意XML文件不存在时,为避免在网页报错,需将文件名置空。
    <xsl:variable name="propertyDoc" select="document($propertyFile)"/>

这篇关于[经验总结]XSLT开发总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/862882

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。