中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

用xslt將xml解析成xhtml的代碼
來源:易賢網 閱讀:1417 次 日期:2014-08-10 17:16:18
溫馨提示:易賢網小編為您整理了“用xslt將xml解析成xhtml的代碼”,方便廣大網友查閱!

使用xslt進行解析的基本格式是這樣的:如

代碼如下:

<?xml version="1.0" encoding="GB2312"?>

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method='html' version='1.0' encoding='GB2312' indent='yes'/>

<xsl:template match="/">

<html>

<body>

//這里可以包含一些xhtml的標簽

</body>

</html>

</xsl:template>

</xsl:stylesheet>

XSL 指擴展樣式表語言(EXtensible Stylesheet Language),xsl是xml的樣式表,xsl 包括3部分,分別是:xslt(一種用于轉換 XML 文檔的語言)、x-path(一種用于在 XML 文檔中導航的語言)、xsl-fo(一種用于格式化 XML 文檔的語言),可以在http://www.w3cschool.cn/這個網站中找到相關內容的教程。

像前面代碼描述的那樣,xslt以xml的版本作為開始,用<xsl:style-sheeet ...>...</xsl:style-sheeet>的格式進行轉換。

由于是初次接觸xslt,對它了解并不是很透徹,下面只是羅列一些我在學習和使用它的時候碰到的一些要點;

一、遞歸以及傳參數方法:

以一顆家族樹為例子,xml文件是這樣的:

代碼如下:

<?xml version="1.0" encoding="ISO-8859-1"?>

<?xml-stylesheet type="text/xsl" href="digui.xsl"?>

<person name="Otto" sex="mael" age="60">

  <person name="Sandra" sex="mael" age="35">

  <person name="Lichao" sex="femael" age="34">

   <person name="Zhangsan" sex="mael" age="12"/>

  </person>

  <person name="Eric" sex="femael" age="36">

   <person name="HaLi" sex="mael" age="18"/>

  </person>

  <person name="Lisi" sex="mael" age="30">

   <person name="HeLi" sex="mael" age="6"/>

   <person name="Andy" sex="femael" age="13"/>

  </person>

  </person>

</person>

現在要寫一個xslt把家族的關系給表達出來,其實家族的關系就是一顆家族樹,所以我們通過輸出不同層次的縮進來表達這樣的關系,最大的祖宗,然后按輩份分別進行縮進,最小輩份的排在最后面,縮進最多,這樣一顆樹的層次就出來了;下面是xsl文件的代碼:

代碼如下:

<?xml version="1.0" encoding="GB2312"?>

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method='html' version='1.0' encoding='GB2312' indent='yes'/>

<xsl:template match="/">

<html>

<body>

<xsl:apply-templates select="person">

<xsl:with-param name="level" select="'0'"/>

</xsl:apply-templates>

</body>

</html>

</xsl:template>

<xsl:template match="person">

<xsl:param name="level"/>

<p style="text-indent:{$level}em">name:<xsl:value-of select="@name"/>,sex:<xsl:value-of select="@sex"/>,age:<xsl:value-of select="@age"/></p>

<xsl:apply-templates select="person">

<xsl:with-param name="level" select="$level + 2"/>

</xsl:apply-templates>

</xsl:template>

</xsl:stylesheet>

在這里我們先在模板中定義了一個叫level的參數,用<xsl:param name="level"/>這樣的語法,然后在主template(<xsl:template match="/">...</xsl:template>)添加模板的時候給參數賦值,

<xsl:apply-templates select="person"> <xsl:with-param name="level" select="'0'"/> </xsl:apply-templates>,參數level的值一開始賦值為“0”,而我們用參數level的值($level)來作縮進的值,如text-indent:{$level}em,所以渲染xml內容的時候,第一層沒有縮進,渲染完第一層后,我們通過

<xsl:apply-templates select="person">

<xsl:with-param name="level" select="$level + 2"/>

</xsl:apply-templates>

這樣的方法將參數level的值進行了累加從而實現了遞歸,這樣每渲染一層,參數值就加上2,從而實現了不同層次的縮進來實現家族樹的結構;這里還要說一下,我們通過@+屬性如@name來取節點屬性的值。

二、用參數實現隔行換色:

還是引用上面的例子,以及參數level,我們在遞歸的時候給參數+1(奇數)而不是+2 (偶數),通過(.. test="$level mod 2 = 0")或(.. test="$level mod 2 = 1")就可以實現選取奇數行還是偶數行,我們用<xsl:choose> <xsl:when test="$level mod 2 = 0">...</xsl:when> <xsl:otherwise>...</xsl:otherwise> </xsl:choose>給奇數行和偶數行不同的background-color,從而實現了隔行換色的效果,具體代碼如下:

代碼如下:

<?xml version="1.0" encoding="GB2312"?>

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method='html' version='1.0' encoding='GB2312' indent='yes'/>

<xsl:template match="/">

<html>

<body>

<xsl:apply-templates select="person">

<xsl:with-param name="level" select="'0'"/>

</xsl:apply-templates>

</body>

</html>

</xsl:template>

<xsl:template match="person">

<xsl:param name="level"/>

<xsl:choose>

<xsl:when test="$level mod 2 = 0">

<p style="text-indent:{$level}em;background-color:#DDD">name:<xsl:value-of select="@name"/>,sex:<xsl:value-of select="@sex"/>,age:<xsl:value-of select="@age"/></p>

</xsl:when>

<xsl:otherwise>

<p style="text-indent:{$level}em;background-color:#EEE">name:<xsl:value-of select="@name"/>,sex:<xsl:value-of select="@sex"/>,age:<xsl:value-of select="@age"/></p>

</xsl:otherwise>

<xsl:apply-templates select="person">

<xsl:with-param name="level" select="$level + 1"/>

</xsl:apply-templates>

</xsl:template>

</xsl:stylesheet>

三、符號轉義以及CDATA語法:

目前碰到的只有“<”和“>” 要轉義成<和>如果在表達式里出現這兩個符號,頁面在預覽的時候就會報錯;

另外我們需要將原文件的內容原封不動的輸出來,包括換行或上面的大于和小于號等頁面元素,這時候就需要CDATA這個標簽, CDATA全稱character data,翻譯為字符數據,數據不進行轉義直接輸出。語法格式如下:

<![CDATA[這里放置需要顯示的字符]]>

例如:

<![CDATA[<person name="ason"></person>]]>

在頁面上顯示的內容將是"<person name="ason"></person>";

四、幾個教程中并沒有提到的名詞:

1、local-name();例子:<xsl:value-of select="local-name()"/>,這里所表達的意思就是當前節點的名字。

2、<xsl:call-template name="" mode="">...</xsl:call-template>,call-template和apply-template的區別,簡單說apply是應用,call是調用。

用apply時,引擎自動搜索與當前select指定xpath的匹配節點相匹配的template(該template必須有屬性match)并使用該template進行處理,此時需要指定的是select的path。

用call時就跟其它語言調用函數一樣,必須指定name屬性,相應的,該template必須有name屬性,當然,也可以在這時with-param(當然相應的模板中有對應的param才行,不過這個不強制要求)。通過設置mode屬性可以調用同一內容的不同表現形式,這個由自己去定義。

3、count(ancestor::*)這種寫法是計算當前節點有多少個祖先節點,當然 ancestor也可以用child,following-sibling等xpath關系。

五、對于要符合多條件的判斷,xslt不能很好的支持:

以家族樹為例,我要取一個位于第二層的,名字叫Lichao的人,如果按字面理解我們可以寫成<xsl:when test="count(ancestor::*) =2 && *[@name] = 'Lichao'">...</xsl:when>,但是這樣寫在預覽xml的時候就會報錯,我也想用條件里面套條件這樣的寫法,也不符合語法,查了很多相關的資料,沒有找到很好的解決辦法。

以上是在學習和使用xslt對xml進行解析的過程中的一些感想和記錄,xslt很強大,有很多功能都沒有涉及,當然,我還要繼續學習和研究。

更多信息請查看IT技術專欄

更多信息請查看網絡編程
易賢網手機網站地址:用xslt將xml解析成xhtml的代碼
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權所有:易賢網

中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
一区二区三区丝袜| 99久精品国产| 亚洲福利视频三区| 中文一区一区三区高中清不卡| 91麻豆精品国产91久久久| 欧洲国产伦久久久久久久| 国产高清不卡一区二区| 国产一区二区三区高清播放| 日本不卡一二三| 日韩高清在线一区| 天天亚洲美女在线视频| 香蕉久久一区二区不卡无毒影院| 亚洲制服丝袜在线| 一区二区三区四区五区视频在线观看| 自拍偷拍国产精品| 亚洲日本在线天堂| 依依成人精品视频| 亚洲资源中文字幕| 午夜精品一区二区三区免费视频 | 亚洲成人午夜影院| 性做久久久久久免费观看欧美| 亚洲国产wwwccc36天堂| 亚洲第一激情av| 日本欧美久久久久免费播放网| 日韩不卡在线观看日韩不卡视频| 蜜桃视频一区二区| 精品中文字幕一区二区| 国产福利91精品一区二区三区| 粉嫩在线一区二区三区视频| 91亚洲精品一区二区乱码| 色综合色综合色综合色综合色综合| 色综合久久99| 欧美丝袜第三区| 欧美一区二区三区四区高清| 欧美zozo另类异族| 国产精品青草综合久久久久99| 中文字幕一区二| 亚洲精品免费播放| 婷婷成人激情在线网| 久久草av在线| 成人h动漫精品| 91高清视频在线| 日韩欧美123| 国产精品麻豆网站| 亚洲国产中文字幕在线视频综合 | 麻豆精品视频在线观看视频| 国产尤物一区二区| 99re这里都是精品| 制服丝袜成人动漫| 日本一区二区三区dvd视频在线| 亚洲欧美电影院| 视频一区视频二区中文| 国产精品1区二区.| 欧亚一区二区三区| 日韩欧美中文字幕精品| 国产精品欧美一区二区三区| 亚洲午夜一区二区| 精品在线免费观看| 91丝袜美腿高跟国产极品老师| 正在播放一区二区| 国产精品天干天干在线综合| 性做久久久久久久免费看| 国产精品综合av一区二区国产馆| 一本色道久久加勒比精品| 欧美岛国在线观看| 亚洲日本一区二区三区| 久色婷婷小香蕉久久| 91丨九色丨国产丨porny| 日韩一区二区三区四区| 亚洲丝袜自拍清纯另类| 免费看黄色91| 日本道精品一区二区三区| 精品国精品自拍自在线| 亚洲综合图片区| 国产精品原创巨作av| 欧美日韩国产在线观看| 中文字幕在线观看不卡| 麻豆精品新av中文字幕| 欧洲亚洲国产日韩| 国产精品天干天干在观线| 青青国产91久久久久久| 色偷偷久久一区二区三区| 精品乱码亚洲一区二区不卡| 亚洲精品久久嫩草网站秘色| 国产成人av自拍| 91精品免费观看| 一区二区在线观看免费视频播放| 国产精品一区在线观看乱码| 3d动漫精品啪啪一区二区竹菊| 亚洲欧美国产三级| 国产精品亚洲а∨天堂免在线| 91精品婷婷国产综合久久竹菊| 亚洲丝袜美腿综合| 国产91色综合久久免费分享| 欧美一区二区三区在线观看| 亚洲一区二区五区| www.亚洲色图.com| 国产亚洲精品资源在线26u| 日本女优在线视频一区二区| 欧美性xxxxxxxx| 最好看的中文字幕久久| 国产福利视频一区二区三区| 日韩一区二区三区四区五区六区 | 国产aⅴ精品一区二区三区色成熟| 91精品国产91久久综合桃花| 亚洲电影中文字幕在线观看| 91蜜桃在线观看| 国产丝袜在线精品| 老鸭窝一区二区久久精品| 欧美日韩精品三区| 亚洲一区在线观看免费 | 中文字幕欧美激情| 国产精品夜夜嗨| 26uuu国产一区二区三区| 蜜臀久久99精品久久久久久9| 欧美日韩五月天| 亚洲成人www| 欧美性受xxxx| 亚洲第一激情av| 欧美色手机在线观看| 亚洲一区二区三区中文字幕 | 97se狠狠狠综合亚洲狠狠| 国产精品日日摸夜夜摸av| 国产成人啪免费观看软件| 国产亚洲精品免费| 粉嫩av一区二区三区粉嫩| 国产日本欧洲亚洲| 高清在线观看日韩| 欧美激情艳妇裸体舞| 成人午夜大片免费观看| 国产日产欧产精品推荐色| 成人在线综合网| 国产精品第四页| 色综合咪咪久久| 亚洲黄色免费电影| 欧美日韩在线精品一区二区三区激情| 亚洲在线视频免费观看| 欧美色综合天天久久综合精品| 亚洲国产成人av| 777xxx欧美| 久久精品国产精品亚洲红杏 | 一区二区三区精品视频| 欧美网站大全在线观看| 日韩综合一区二区| 欧美一区二区福利在线| 久久精品国产亚洲a| 久久只精品国产| 成人午夜在线视频| 亚洲精品成人精品456| 欧美日韩午夜在线视频| 美女视频黄 久久| 久久在线观看免费| 成a人片国产精品| 亚洲欧美视频在线观看| 欧美久久久久久蜜桃| 久久成人久久鬼色| 国产精品乱人伦一区二区| 色综合久久久久综合| 午夜亚洲福利老司机| 精品久久久久久最新网址| 成人晚上爱看视频| 亚洲午夜久久久久久久久久久| 欧美一区二区三区视频在线观看| 国产福利电影一区二区三区| 亚洲欧美国产高清| 日韩欧美国产高清| 成人av免费在线观看| 亚洲综合激情小说| 精品少妇一区二区三区在线视频| 成人av在线影院| 亚洲午夜在线视频| 久久一区二区三区国产精品| 福利一区二区在线| 亚洲午夜私人影院| 久久免费视频一区| 色综合中文字幕| 蜜臀91精品一区二区三区| 欧美国产乱子伦| 在线不卡免费欧美| 国产精品夜夜爽| 亚洲超碰97人人做人人爱| 26uuu精品一区二区| 91久久精品一区二区三| 久久99精品国产麻豆婷婷洗澡| 综合亚洲深深色噜噜狠狠网站| 欧美肥胖老妇做爰| 本田岬高潮一区二区三区| 午夜精品久久久久久久99水蜜桃| 国产日韩精品一区二区三区在线| 91福利在线观看| 国产乱人伦偷精品视频不卡| 一区二区三区加勒比av| 久久精品一区二区三区不卡| 欧美无砖专区一中文字| 国产精品白丝jk黑袜喷水| 亚洲成人第一页| 国产精品不卡在线观看| 欧美一区二区三区在线看| 91猫先生在线| 国产乱人伦偷精品视频不卡|