DocBook XSL完全手册(XSL简短介绍)

原文链接:http://www.sagehill.net/docbookxsl/IntroXSL.html
 
1. XSL处​理​模​型​
1.1. 重​要​的​上​下​文​环​境​
1.2. 编​程​特​性​
1.3. 生​成​HTML
1.4. 生​成​格​式​化​对​象​(FO)

1. XSL处​理​模​型​

XSL是​一​个​模​板​语​言​,而​不​是​一​个​程​序​语​言​。​这​意​味​着​ stylesheet制 ​定​了​一​个​输​出​样​本​,而​不​是​使​用​程​序​按​步​骤​生​成​。​一​个​ stylesheet包 ​含​了​一​个​混​合​的​输​出​样​本​,并​且​为​每​个​样​本​佩​戴​了​输​出​指​令​。​每​一​个​晓​得​输​出​样​本​ 加​上​处​理​指​令​就​构​成​了​一​个​模​板​。
通​常​情​况​,你​要​为​文​档​内​的​每​个​元​素​书​写​一​个​模​板​。​这​样​能​够​让​你​每​次​只​专​注​于​一​个 ​元​素​,并​持​有​一​个​ stylesheet模​块​。​XSL的​强​大​之​ 处​在​于​它​能​够​递​归​的​处​理​模​板​,也​就​是​说​,每​个​模​板​只​处​理​它​对​应​的​一​个​元​素​,然​后​调 ​用​其​它​模​板​来​处​理​它​的​子​元​素​,以​此​类​推​。​一​个​XML文​档​总​是​用​一​个​根​元​素​作​为​顶​层 ​元​素​,并​包​含​可​以​嵌​套​的​子​元​素​,XSL模​板​总​是​从​顶​层​开​始​扫​描​,并​照​层​级​来​处​理​元​素 ​。​
 
现​在​用​Docbook的​ 元 ​素​为​例​子​,要​把​它​转​换​成​HTML,你​希​望​使​用​HTML标​记​

来 ​包​围​要​输​出​的​内​容​。​但​是​DocBook的​ 元 ​素​可​以​包​含​任​何​ in-line类​型​的​元​素​来​标​记​内​容​;不​用​担​心​,你​可​以​让​其​它​对​应​的​模​板​来​处​理​这​些​元​素​,因​此​你​的​ XSL模​板​会​是​下​面​这​样​的 ​简​单​:

 

元​素​ 表 ​示​开​始​一​个​新​的​模​板​,属​性​ match声​明​什​么​元​素​要​ 被​应​用​模​板​,在​这​个​例​子​中​将​匹​配​任​何​的​ 元 ​素​。​模​板​指​出​要​输​出​一​个​

并 ​执​行​指​令​。​这​将​告​诉​XSL处​理​器​在​ stylesheet内​寻​找​所​有​的​模​板​并​将​其​应​用​到​段​落​中​的​元​素 ​。​如​果​ stylesheet每​个​模​板​都​含​有​一​个​ 指​令​,那 ​么​将​会​递​归​执​行​下​去​。​当​执​行​到​ stylesheet的​末​ 尾​时​,模​板​将​输​出​一​个​结​束​的​

标 ​签​。​

1.1. 重​要​的​ 上​下​文​环​境​

既​然​不​需​要​用​线​性​的​步​骤​来​书​写​你​的​文​档​,那​么​一​个​用​来​描​述​在​什​么​地​方​应​用​这​些​模 ​板​的​ 上​下​文​环​境​是 ​尤​为​重​要​的​。​大​多​数​模​板​都​提​供​了​一​个​ match属​性 ​来​描​述​上​下​文​环​境​,这​是​一​个​纯​粹​的​表​达​式​语​言​: XPath,用​来​标​识​你​文​档​中​的​哪​个​部​分​将​被​应​用​这​个​模​板​。​简​单​的​上​下​文​环​境​通​常​只​声​明​一​ 个​元​素​名​,就​像​上​面​的​例​子​。​但​是​你​也​可​以​指​定​元​素​的​子​元​素​,子​元​素​也​可​以​指​定​属​ 性​值​,指​定​的​元​素​成​一​个​队​列​的​形​式​,以​此​类​推​。​下​面​的​模​板​例​子​描​述​如​何​匹​配​ DocBook的​ 元 ​素​

  

上​面​定​义​了​三​个​模​板​,第​一​个​应​用​于​ 元 ​素​本​身​,另​外​两​个​应​用​其​子​元​素​。​在​第​二​个​模​板​中​的​ match属 ​性​是​一​个​ XPath表​达​式​,用​来​表​示​这​里​ 的​ </code></strong>元​素​是​一​个 ​直​接​隶​属​与​ <strong class="userinput"><code><formalpara></code></strong>元 ​素​的​子​元​素​。​这​就​区​分​与​在​DocBook中​的​其​它​ <strong class="userinput"><code><title></code></strong>元 ​素​。​ <span class="emphasis"><em>XPath</em></span>表​达​式​是​控​制​模​板​如​何​应​用 ​的​关​键​。​ </div> <div class="para">   </div> <div class="para"> 通​常​情​况​,XSL处​理​器​的​内​部​规​则​是​在​面​对​高​层​模​板​和​底​层​模​板​时​,优​先​应​用​底​层​模​板 ​,这​里​的​层​次​是​元​素​的​层​级​,文​档​顶​层​是​高​层​元​素​,以​此​类​推​。​这​能​够​让​你​更​细​致​的​ 控​制​模​板​应​用​,但​是​在​你​没​有​为​复​杂​的​符​合​元​素​提​供​细​致​的​上​下​文​环​境​时​,XSL处​理​器 ​也​对​其​提​供​了​备​选​方​案​。​这​个​特​性​在​上​面​的​例​子​中​得​以​体​现​,对​于​ <code class="literal">formalpara/para</code>,例​子​中​提​供​的​第​三​个​模​板​, <strong class="userinput"><code><para></code></strong>元​素​作​为​ <strong class="userinput"><code><formalpara></code></strong>元​素​的​子​元​素​,处 ​理​器​将​使​用​单​独​的​方​式​来​处​理​它​,它​将​不​会​再​输​出​已​经​被​父​元​素​输​出​的​ <strong class="userinput"><code><p></code></strong>HTML标​签​。​如​果​ <code class="literal">formalpara/para</code>模​板​没​有​包​含​在​上​面​的​例​子​中​,那​么​处​理 ​器​将​使​用​备​选​的​模​板​ <code class="literal">match="para"</code>,这​个​模​板​在​上 ​一​个​例​子​中​定​义​。​这​样​处​理​器​将​输​出​第​二​层​ <strong class="userinput"><code><p></code></strong>HTML 标​签​。​ </div> <div class="para">   </div> <div class="para"> 你​也​可​以​使​用​XSL中​的​ <code class="literal">modes</code>来​控​制​模​板​上​下​文 ​环​境​,这​种​方​式​已​经​被​广​泛​应​用​与​DocBook stylesheet中​。​ <code class="literal">Modes</code>能​够​让​你​使​用​不​同​的​方​式​来​处​理​相​同​的​输​入​。​在​ <strong class="userinput"><code><xsl:template></code></strong>模​板​定​义​中​使 ​用​ <code class="literal">mode</code>属​性​将​会​为​模​板​指​定​一​个​ <code class="literal">mode</code>命​名​。​这​种​情​况​下​,当​有​两​个​模​板​指​定​了​相​同​的​ <code class="literal">mode</code>属​性​值​,处​理​器​将​把​ <code class="literal">math</code>的 ​属​性​值​和​ <code class="literal">mode</code>的​属​性​值​通​过​表​达​式​ <span class="emphasis"><em>and</em></span>连​接​来​作​为​一​个​过​滤​条​件​,也​就​是​说​,当​ <code class="literal">mode</code>属​性​值​相​同​时​则​继​续​使​用​ <code class="literal">match</code>属 ​性​值​匹​配​来​区​分​使​用​哪​个​模​板​。​这​就​让​你​对​一​个​元​素​定​义​了​两​个​不​同​的​模​板​来​针​对 ​不​同​的​上​下​文​环​境​。​例​如​,下​面​对​DocBook的​ <strong class="userinput"><code><listitem></code></strong>元 ​素​定​义​了​两​个​不​同​的​模​板​: </div> <div class="para"> <xsl:template match="listitem"> <li><xsl:apply-templates/></li> </xsl:template> <xsl:template match="listitem" mode="xref"> <xsl:number format="1"/> </xsl:template> </div> <div class="para"> 第​一​个​模​板​应​用​于​普​通​的​列​表​输​出​情​况​,模​板​输​出​ <strong class="userinput"><code><li></code></strong>HTML 标​签​来​。​第​二​个​模​板​定​义​为​ <strong class="userinput"><code><xsl:apply-templates select="$target" mode="xref"/></code></strong>,这​种​情​况​下​用​来​专​门​处​理 ​ <strong class="userinput"><code><xref></code></strong>元​素​。​在​这​个 ​例​子​中​, <code class="literal">mode</code>属​性​的​值​决​定​应​用​第​二​个​模​板​,它​将​ 初​始​带​有​序​号​的​列​表​。​因​为​在​输​出​ <strong class="userinput"><code><xref></code></strong>元 ​素​时​经​常​会​有​这​样​的​需​求​。​ </div> <div class="para">   </div> <div class="para"> 请​记​住​, <code class="literal">mode</code>的​设​置​不​会​自​动​的​贯​穿​处​理​子​模​ 板​ <strong class="userinput"><code><xsl:apply-templates/></code></strong>。 ​当​子​模​板​含​有​ <code class="literal">mode</code>属​性​时​,你​可​以​有​两​个​选​择​来​处 ​理​: </div> <div class="itemizedlist"> <ul> <li class="listitem"> <div class="para"> 要​想​继​续​使​用​ <code class="literal">mode</code>模​式​,也​就​是​使​用​ <strong class="userinput"><code><xsl:apply-templates mode="mode"/></code></strong>模 ​板​来​处​理​子​元​素​,处​理​器​将​查​找​具​有​相​同​ <code class="literal">mode</code>属​性 ​值​的​模​板​来​应​用​子​元​素​。​注​意​,这​样​的​话​你​就​没​有​备​选​方​案​,如​果​模​板​没​有​指​定​ <code class="literal">mode</code>属​性​值​,子​元​素​将​不​会​有​模​板​匹​配​,也​就​不​会​被​模​板​ 处​理​。​如​果​你​想​使​用​没​有​ <code class="literal">mode</code>属​性​的​模​板​作​为​备​选 ​,那​么​在​ <code class="literal">stylesheet</code>中​加​入​下​面​的​模​板​: <xsl:template match="*" mode="mode"> <xsl:apply-templates select="." /> </xsl:template>   </div> <div class="para"> 这​样​的​话​,对​于​任​何​子​元​素​,如​果​模​板​没​有​配​备​ <code class="literal">mode</code>属 ​性​值​,那​么​模​板​也​将​会​被​应​用​ </div> </li> <li class="listitem"> <div class="para"> 使​用​通​常​的​ <code class="literal">无​mode</code>模​板​,对​子​元​素​使​用​ <strong class="userinput"><code><xsl:apply-templates/></code></strong>,你​ 可​以​定​义​ <code class="literal">无​mode</code>模​板​ </div> </li> </ul> </div> </div> <div class="section"> <div class="titlepage"> <div> <div> <h3 id="id1361295" class="title">1.2. 编​程​特​性​</h3> </div> </div> </div> <div class="para"> 尽​管​XSL是​模​板​驱​动​的​,但​是​它​同​样​具​有​很​多​传​统​编​程​语​言​的​特​性​。​下​面​一​些​例​子​来​ 自​与​DockBook stylesheet </div> <div class="para"> Assign a value to a variable: <xsl:variable name="refelem" select="name($target)"/> If statement: <xsl:if test="$show.comments"> <i><xsl:call-template name="inline.charseq"/></i> </xsl:if> Case statement: <xsl:choose> <xsl:when test="@columns"> <xsl:value-of select="@columns"/> </xsl:when> <xsl:otherwise>1</xsl:otherwise> </xsl:choose> Call a template by name like a subroutine, passing parameter values and accepting a return value: <xsl:call-template name="xref.xreflabel"> <xsl:with-param name="target" select="$target"/> </xsl:call-template> </div> <div class="para"> 然​而​你​不​能​像​在​其​它​编​程​语​言​那​样​来​使​用​上​面​这​些​结​构​,因​为​ <code class="literal">变​量​</code>在​特​别​的​情​况​下​会​具​有​完​全​不​同​的​行​为​。​ </div> <div class="section"> <div class="titlepage"> <div> <div> <h4 id="id1361336" class="title">1.2.1. 使​用​ 变​量​和​参​数​</h4> </div> </div> </div> <div class="para"> XSL提​供​两​种​元​素​来​让​你​指​派​值​到​变​量​上​: <strong class="userinput"><code><xsl:variable></code></strong>和 ​ <strong class="userinput"><code><xsl:param></code></strong>。​它​们​ 享​用​共​同​的​命​名​空​间​和​语​法​,都​使​用​ <code class="literal">$name</code>来​引​用​变 ​量​。​这​两​个​元​素​最​主​要​的​不​同​是​ <code class="literal">param's</code>的​默​认​值 ​能​够​被​模​板​调​用​的​ <strong class="userinput"><code><xsl:with-param></code></strong>所 ​取​代​,就​如​上​面​最​后​一​个​例​子​所​示​。​ </div> <div class="para"> 下​面​两​个​例​子​同​样​来​自​DocBook: </div> <div class="para"> <xsl:param name="cols">1</xsl:param> <xsl:variable name="segnum" select="position()"/> </div> <div class="para"> 在​上​面​两​个​元​素​中​, <code class="literal">param</code>和​ <code class="literal">variable</code>的​名​字​都​是​通​过​ <code class="literal">name</code>属 ​性​来​指​定​的​,可​以​看​到​ <code class="literal">param</code>的​名​字​是​ <code class="literal">cols</code>, <code class="literal">variable</code>的​名​字​是 ​ <code class="literal">segnum</code>。​它​们​的​值​可​以​通​过​两​种​方​式​来​提​供​,参​数 ​的​例​子​是​通​过​元​素​的​内​容​值​ <span class="quote">“<span class="quote">1</span>”</span>来 ​赋​值​的​,而​变​量​的​例​子​是​通​过​ <code class="literal">select</code>属​性​值​来​赋​值 ​的​,这​个​属​性​值​是​一​个​表​达​式​的​结​果​,而​元​素​本​身​并​没​有​内​容​值​。​ </div> <div class="para">   </div> <div class="para"> 对​于​新​接​触​XSL的​用​户​来​说​变​量​的​特​性​有​点​古​怪​,当​你​给​一​个​变​量​赋​值​后​,你​就​不​能​在 ​它​的​应​用​周​期​内​改​变​它​的​值​,如​果​这​样​做​会​报​错​。​所​以​你​不​能​像​在​使​用​其​它​编​程​语​ 言​那​样​对​变​量​进​行​动​态​存​储​,变​量​在​它​的​应​用​周​期​内​持​有​的​是​固​定​值​,并​在​应​用​周​期​ 结​束​时​销​毁​。​这​个​特​性​是​在​设​计​XSL时​就​决​定​了​,因​为​XSL是​模​板​驱​动​而​非​流​程​驱​动​的 ​。​这​意​味​着​它​没​有​固​定​的​执​行​顺​序​,所​以​你​无​法​依​赖​一​个​能​够​改​变​值​的​变​量​。​要​想​ 正​确​的​使​用​变​量​,你​必​须​理​解​变​量​的​周​期​是​如​何​定​义​的​。​ </div> <div class="para">   </div> <div class="para"> 如​果​一​个​变​量​定​义​在​所​有​模​板​的​外​部​,那​么​它​就​被​认​为​是​一​个​全​局​变​量​,它​对​所​有​模​ 板​都​生​效​。​全​局​变​量​的​值​是​固​定​不​变​的​,也​不​能​被​任​何​模​板​所​重​新​赋​值​。​但​是​你​可​以 ​在​模​板​内​创​建​一​个​与​全​局​变​量​同​名​的​本​地​变​量​,然​后​赋​予​其​它​的​值​。​本​地​变​量​只​能​ 在​其​自​己​的​应​用​周​期​内​起​作​用​。​ </div> <div class="para"> 定​义​在​模​板​里​的​本​地​变​量​只​会​在​它​被​允​许​的​周​期​内​生​效​,也​就​是​对​在​它​之​后​的​同​胞​和 ​后​裔​有​效​。​要​想​理​解​这​个​周​期​,你​必​须​明​白​XSL指​令​其​实​就​是​纯​粹​的​XML元​素​,并​内​嵌 ​在​XML家​族​层​级​结​构​中​。​它​们​通​常​是​指​父​级​、​子​级​、​同​级​、​祖​先​级​和​后​裔​级​。​在​ XML家​族​层​级​中​,给​一​个​变​量​赋​值​就​像​发​布​一​个​公​告​给​你​希​望​听​到​家​族​成​员​一​样​。​你​ 只​能​把​公​告​发​布​给​比​你​年​龄​低​的​同​级​(包​括​你​自​己​)和​它​们​的​后​裔​级​,也​就​是​说​定​义​在 ​你​前​面​的​年​长​的​同​级​将​不​会​听​到​公​告​,更​不​用​说​你​的​父​级​和​祖​先​了​。​如​果​你​发​布​不​ 同​的​公​告​内​容​但​是​用​相​同​的​公​告​名​给​相​同​的​被​通​知​成​员​,那​将​出​现​错​误​,(言​外​之​义​,你​重​新​给​变​量​赋​值​了​)。​请​记​住​这​里​的​家​族​并​不​是​你​的​文​档​元​素​,而​只​是​在​你​ <code class="literal">stylesheet</code>中​的​XSL指​令​。​手​工​编​写​ <code class="literal">stylesheet</code>将​对​你​跟​踪​周​期​很​有​帮​助​,XSL元​素​缩​进​和​嵌​套 ​将​帮​助​你​理​解​周​期​。​下​面​的​代​码​片​段​来​自​DocBook stylesheet中​的​ <code class="literal">pi.xsl</code>文​件​,举​例​说​明​两​个​变​量​周​期​的​不​同​。​ </div> <div class="para"> 1 <xsl:template name="dbhtml-attribute"> 2 ... 3 <xsl:choose> 4 <xsl:when test="$count>count($pis)"> 5 <!-- not found --> 6 </xsl:when> 7 <xsl:otherwise> 8 <xsl:variable name="pi"> 9 <xsl:value-of select="$pis[$count]"/> 10 </xsl:variable> 11 <xsl:choose> 12 <xsl:when test="contains($pi,concat($attribute, '='))"> 13 <xsl:variable name="rest" select="substring-after($pi,concat($attribute,'='))"/> 14 <xsl:variable name="quote" select="substring($rest,1,1)"/> 15 <xsl:value-of select="substring-before(substring($rest,2),$quote)"/> 16 </xsl:when> 17 <xsl:otherwise> 18 ... 19 </xsl:otherwise> 20 </xsl:choose> 21 </xsl:otherwise> 22 </xsl:choose> 23 </xsl:template> </div> <div class="para"> 变​量​ <code class="literal">pi</code>的​周​期​开​始​于​第​8行​,也​就​是​模​板​定​义​ 它​的​位​置​,结​束​于​第​20行​它​最​后​一​个​同​级​兄​弟​结​束​的​地​方​ <sup>[1]</sup>。​变​量​ <code class="literal">rest</code>的​周​ 期​开​始​于​13行​,结​束​与​15行​。​幸​运​的​是​,15行​的​输​出​表​达​式​赶​在​周​期​结​束​前​使​用​了​变​ 量​值​。​ </div> <div class="para">   </div> <div class="para"> 让​我​们​来​看​看​当​在​变​量​的​周​期​内​使​用​ <strong class="userinput"><code><xsl:apply-templates/></code></strong>会 ​如​何​?被​应​用​的​模​板​内​会​得​到​变​量​值​吗​?答​案​是​否​定​的​。​因​为​被​应​用​的​模​板​生​效​周​期 ​并​没​有​真​正​的​在​变​量​周​期​内​,它​在​ <code class="literal">stylesheet</code>的​其 ​它​地​方​退​出​,并​不​是​在​变​量​的​低​龄​同​级​和​后​裔​内​退​出​。​ </div> <div class="para"> 要​想​传​值​给​一​个​模​板​,你​可​以​使​用​ <strong class="userinput"><code><xsl:with-param/></code></strong>传 ​递​一​个​参​数​。​这​种​参​数​传​递​通​常​被​用​在​使​用​ <strong class="userinput"><code><xsl:call-templates/></code></strong>调 ​用​指​定​模​板​,尽​管​你​也​可​以​使​用​ <strong class="userinput"><code><xsl:apply-templates/></code></strong>调 ​用​模​板​,但​是​通​常​被​调​用​的​模​板​希​望​传​入​一​个​与​ <strong class="userinput"><code><xsl:param/></code></strong>定 ​义​同​名​的​参​数​。​这​样​就​可​以​在​模​板​内​使​用​这​个​参​数​值​。​任​何​传​入​的​参​数​名​如​果​在​模 ​板​内​没​有​被​定​义​将​被​忽​略​处​理​。​ </div> <div class="para"> 下​面​参​数​传​递​的​例​子​来​自​ <code class="literal">docbook.xsl</code>: </div> <div class="para"> <xsl:call-template name="head.content"> <xsl:with-param name="node" select="$doc"/> </xsl:call-template> </div> <div class="para"> 上​面​一​个​命​名​为​ <code class="literal">head.content</code>的​模​板​被​调​用​ ,在​调​用​周​期​内​传​递​了​一​个​名​为​ <code class="literal">node</code>的​参​数​,参​数​值 ​是​变​量​ <code class="literal">$doc</code>。​上​面​被​调​用​的​模​板​看​上​去​会​是​下​面​ 的​样​子​: </div> <div class="para"> <xsl:template name="head.content"> <xsl:param name="node" select="."/> ... </div> <div class="para"> 模​板​期​望​一​个​参​数​是​因​为​模​板​定​义​中​声​明​了​一​个​ <strong class="userinput"><code><xsl:param/></code></strong>,并​且​名​字​和​传​入​参​数​名​相​同​。​模​板​内​的​ <strong class="userinput"><code><xsl:param/></code></strong>提 ​供​了​一​个​默​认​值​,如​果​传​入​的​参​数​名​没​有​与​其​匹​配​,那​么​将​在​模​板​内​使​用​默​认​值​。​ </div> </div> </div> <div class="section"> <div class="titlepage"> <div> <div> <h3 id="id1361529" class="title">1.3. 生​成​ HTML</h3> </div> </div> </div> <div class="para"> 从​你​的​DocBook文​件​生​成​HTML需​要​使​用​HTML版​本​的​ <code class="literal">stylesheet</code>,这​些​由​ <code class="literal">stylesheet</code>的​HTML驱​动​文​件​ <code class="literal">docbook/html/docbook.xsl</code>来​完​成​。​这​是​一​个​主​ <code class="literal">stylesheet</code>文​件​,它​使​用​ <strong class="userinput"><code><xsl:include/></code></strong>导 ​入​其​它​组​件​文​件​组​装​一​个​完​整​的​ <code class="literal">stylesheet</code>用​来​ 生​成​HTML </div> <div class="para"> DocBook stylesheet生​成​HTML的​方​式​是​通​过​应​用​模​板​来​输​出​一​些​文​本​内​容​和​HTML元​素​的​混​合​ 体​。​从​ <code class="literal">docbook.xsl</code>的​顶​层​开​始​: </div> <div class="para"> <xsl:template match="/"> <xsl:variable name="doc" select="*[1]"/> <html> <head> <xsl:call-template name="head.content"> <xsl:with-param name="node" select="$doc"/> </xsl:call-template> </head> <body> <xsl:apply-templates/> </body> </html> </xsl:template> </div> <div class="para"> 模​板​匹​配​到​你​输​入​文​档​的​根​元​素​,然​后​就​开​始​递​归​应​用​模​板​。​首​先​定​义​了​一​个​变​量​ <code class="literal">doc</code>,然​后​输​出​两​个​HTML元​素​ <strong class="userinput"><code><html></code></strong>和​ <strong class="userinput"><code><head></code></strong>。​接​着​调​用​名​为​ <code class="literal">head.content</code>模​板​来​处​理​HTML的​ <strong class="userinput"><code><head></code></strong>,关​闭​ <strong class="userinput"><code><head></code></strong>后​就​开​始​ <strong class="userinput"><code><body></code></strong>。​这​里​使​用​ <strong class="userinput"><code><xsl:apply-templates/></code></strong>来​递​ 归​处​理​输​入​文​档​中​的​内​容​,最​终​关​闭​像​HTML文​件​的​输​出​。​ </div> <div class="para">   </div> <div class="para"> 简​单​的​HTML元​素​可​以​用​不​带​任​何​属​性​的​元​素​生​成​,如​ <strong class="userinput"><code><html></code></strong>,但​是​如​果​HTML元​素​输​出 ​依​赖​上​下​文​环​境​,你​就​需​要​一​个​强​大​的​机​制​来​选​取​输​出​元​素​并​且​还​会​生​成​它​们​的​属​ 性​和​属​性​值​。​下​面​的​代​码​片​段​来​自​于​ <code class="literal">sections.xsl</code>,其​展​示​了​用​ <strong class="userinput"><code><xsl:element></code></strong>和 ​ <strong class="userinput"><code><xsl:attibute></code></strong>来​生 ​成​HTML的​头​标​签​ </div> <div class="para">   1 <xsl:element name="h{$level}"> 2 <xsl:attribute name="class">title</xsl:attribute> 3 <xsl:if test="$level<3"> 4 <xsl:attribute name="style">clear: all</xsl:attribute> 5 </xsl:if> 6 <a> 7 <xsl:attribute name="name"> 8 <xsl:call-template name="object.id"/> 9 </xsl:attribute> 10 <b><xsl:copy-of select="$title"/></b> 11 </a> 12 </xsl:element> </div> <div class="para"> 整​个​例​子​生​成​了​一​个​单​独​的​HTML头​元​素​。​第​1行​定​义​了​一​个​HTML元​素​,例​子​中​元​素​的​ 名​字​是​一​个​带​有​变​量​ <code class="literal">$level</code>的​表​达​式​,变​量​是​通​过​ 参​数​出​入​模​板​的​。​这​样​的​话​模​板​就​会​生​成​ <strong class="userinput"><code><hi></code></strong>、 ​ <strong class="userinput"><code><h2></code></strong>、​等​等​。​具​体​生 ​成​哪​个​依​赖​于​上​下​文​环​境​。​第​2行​为​头​元​素​添​加​了​一​个​属​性​ <code class="literal">class="title"</code>。​第​3-5行​添​加​了​属​性​ <code class="literal">style="clear all"</code>,但​是​只​适​用​于​头​元​素​的​层​级​数​小​于​3 的​情​况​。​第​6行​打​开​一​个​锚​元​素​ <strong class="userinput"><code><a></code></strong>。 ​看​上​去​没​带​有​任​何​属​性​,其​实​是​在​第​7-9行​为​ <strong class="userinput"><code><a></code></strong>元 ​素​添​加​了​ <code class="literal">name</code>属​性​。​这​个​例​子​描​述​XSL管​理​的​输​出 ​元​素​是​一​个​活​的​元​素​,而​不​只​是​一​个​文​本​串​。​第​10行​输​出​头​元​素​的​标​题​文​本​,同​样​是 ​通​过​传​递​参​数​的​形​式​获​得​,然​后​关​闭​HTML粗​体​标​签​。​第​11行​使​用​ <strong class="userinput"><code></a></code></strong>关​闭​锚​标​签​,第​12行​是​头​元 ​素​的​关​闭​标​签​,这​就​结​束​了​头​元​素​的​定​义​。​ </div> <div class="para">   </div> <div class="para"> 当​你​随​着​模​板​的​递​归​来​处​理​元​素​时​,可​能​会​疑​惑​在​你​文​档​里​的​内​容​文​本​是​如​何​被​模​板 ​输​出​的​,在​ <code class="literal">docbook.xsl</code>文​件​中​你​会​找​到​如​下​的​模​板​,它​专​门​用​来​内​容​文​本​。​ </div> <div class="para"> <xsl:template match="text()"> <xsl:value-of select="."/> </xsl:template> </div> <div class="para"> 这​个​模​板​的​主​体​由​文​本​节​点​的​值​组​成​,它​只​是​文​本​。​通​常​,如​果​你​的​ <code class="literal">stylesheet</code>中​没​有​提​供​匹​配​的​模​板​,XSL处​理​器​都​有​一​些​内 ​建​的​模​板​来​获​取​内​容​文​本​。​上​面​的​模​板​就​是​提​供​这​样​的​功​能​,只​不​过​它​明​确​定​义​在​ <code class="literal">stylesheet</code>文​件​中​。​ </div> </div> <div class="section"> <div class="titlepage"> <div> <div> <h3 id="id1252298" class="title">1.4. 生​成​格 ​式​化​对​象​(FO)</h3> </div> </div> </div> <div class="para"> 使​用​ <code class="literal">fo</code>版​本​的​ <code class="literal">stylesheet</code>可 ​以​把​你​的​DocBook XML生​成​格​式​化​对​象​。​这​里​需​要​在​你​的​ <code class="literal">stylesheet</code>中 ​使​用​ <code class="literal">docbook/fo/docbook.xsl</code>。​在​你​的​主​ <code class="literal">stylesheet</code>文​件​中​使​用​ <strong class="userinput"><code><xsl:include></code></strong>引 ​入​所​有​的​组​件​组​装​成​完​整​的​ <code class="literal">stylesheet</code>来​生​成​格​ 式​化​对​象​。​生​成​格​式​化​对​象​只​完​成​了​输​出​过​程​的​一​半​,你​还​需​要​使​用​ <code class="literal">XSL-FO</code>处​理​器​,比​如​FOP。​ </div> <div class="para"> DocBook的​fo stylesheet和​HTML stylesheet的​工​作​方​式​类​似​,就​是​用​ <strong class="userinput"><code><fo:something></code></strong>形​式​的​标​签​代​ 替​相​应​的​HTML标​签​。​例​如​,输​出​ <code class="literal">in-line</code>类​型​并​且​使 ​用​ <code class="literal">monospace</code>字​体​,fo的​形​式​会​是​如​下​的​样​子​: </div> <div class="para"> <fo:inline-sequence font-family="monospace">/usr/man</fo:inline-sequence> </div> <div class="para"> 输​出​一​个​DocBook <strong class="userinput"><code><filename></code></strong>元 ​素​,在​ <code class="literal">docbook/fo/inline.xsl</code>中​的​模​板​定​义​看​起​ 来​像​如​下​的​样​子​: </div> <div class="para"> <xsl:template match="filename"> <xsl:call-template name="inline.monoseq"/> </xsl:template> <xsl:template name="inline.monoseq"> <xsl:param name="content"> <xsl:apply-templates/> </xsl:param> <fo:inline-sequence font-family="monospace"> <xsl:copy-of select="$content"/> </fo:inline-sequence> </xsl:template> </div> <div class="para"> 在​XSL标​准​中​指​定​了​很​多​XSL-FO标​签​和​属​性​的​规​范​,要​描​述​在​DocBook中​如​何​遵​循​这​些 ​规​范​显​然​已​经​超​出​本​书​的​范​围​。​庆​幸​的​是​,这​些​只​是​中​间​格​式​,你​不​许​要​马​上​去​处​理 ​,除​非​你​正​在​自​己​编​写​ <code class="literal">stylesheets</code>。​ </div> </div> </div> <div class="footnotes"> <br> <hr> <div class="footnote"> <p><sup>[1] </sup>从​技​术​上​来​讲​,变​量​的​周​期​延​伸​到​<strong class="userinput"><code><xsl:variable></code></strong>父 ​级​元​素​结​束​的​地​方​,也​就​是​它​最​后​一​个​同​级​兄​弟​ </p> </div> </div> </div> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1297789302033424384"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(DocBook)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1828496425646911488.htm" title="全面启用Markdown语法以及前端格式优化(代码高亮行号显示等优化)全过程" target="_blank">全面启用Markdown语法以及前端格式优化(代码高亮行号显示等优化)全过程</a> <span class="text-muted">zoomlaCMS</span> <div>什么是MarkDownMarkdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。Markdown具有一系列衍生版本,用于扩展Markdown的功能(如表格、脚注、内嵌HTML等等),这些功能原初的Markdown尚不具备,它们能让Markdown转换成更多的格式,例如LaTeX,Docbook。Markdown增强版中比较有名的有Markd</div> </li> <li><a href="/article/1763947682780504064.htm" title="Linux运维_Bash脚本_部署安装DocBook-XSL-1.79.1(XSL-Stylesheets)" target="_blank">Linux运维_Bash脚本_部署安装DocBook-XSL-1.79.1(XSL-Stylesheets)</a> <span class="text-muted">Mostcow</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/bash/1.htm">bash</a> <div>Linux运维_Bash脚本_部署安装DocBook-XSL-1.79.1(XSL-Stylesheets)Bash(BourneAgainShell)是一个解释器,负责处理Unix系统命令行上的命令。它是由BrianFox编写的免费软件,并于1989年发布的免费软件,作为Sh(BourneShell)的替代品。您可以在Linux和MacOS机器上使用Bash,甚至可以通过适用于Linux的Win</div> </li> <li><a href="/article/1756166828473729024.htm" title="2018-07-16" target="_blank">2018-07-16</a> <span class="text-muted">PeppaTang</span> <div>Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。Markdown具有一系列衍生版本,用于扩展Markdown的功能(如表格、脚注、内嵌HTML等等),这些功能原初的Markdown尚不具备,它们能让Markdown转换成更多的格式,例如LaTeX,Docbook。Markdown增强版中比较有名的有MarkdownExtra、Mu</div> </li> <li><a href="/article/1745183247815426048.htm" title="Notepad++的列编辑功能" target="_blank">Notepad++的列编辑功能</a> <span class="text-muted">凯睿看世界</span> <div>原文:https://blog.csdn.net/guofang110/article/details/77881342本文网址:https://www.crifan.com/files/doc/docbook/rec_soft_npp/release/htmls/npp_function_column_mode.htmlNotepad++介绍全目录:https://www.crifan.com/</div> </li> <li><a href="/article/1744083612724117504.htm" title="error : Unknown IO error warning: failed to load external entity “http://docbook.sourceforge.net/rel" target="_blank">error : Unknown IO error warning: failed to load external entity “http://docbook.sourceforge.net/rel</a> <span class="text-muted">lijinghailjh</span> <a class="tag" taget="_blank" href="/search/%E7%A1%AC%E4%BB%B6%E5%B7%A5%E7%A8%8B/1.htm">硬件工程</a> <div>shellerror:UnknownIOerrorwarning:failedtoloadexternalentity"http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl"compilationerror:file/home/ljh/mqtt/mosquitto/man/manpage.xslline3el</div> </li> <li><a href="/article/1743806225100849152.htm" title="关于Markdown语言" target="_blank">关于Markdown语言</a> <span class="text-muted">上学威龙_1a24</span> <div>Markdown语言是一种可以使用普通文本编辑器编写的标记语言,通过简单地标记语法,他可以是普通文本内容具有一定的格式。Markdown具有一系列衍生版本用于扩展Markdown的功能。(定义引用于知乎)虽然没有使用过Markdown,但是hbuilder中的一些语言也类似于Markdown语言,使用Markdown的软件有LaTex,Docbook等。常用的Markdown语言有:1.#1,##</div> </li> <li><a href="/article/1743372752489824256.htm" title="What is Asciidoctor" target="_blank">What is Asciidoctor</a> <span class="text-muted">qwfys200</span> <a class="tag" taget="_blank" href="/search/Reading/1.htm">Reading</a><a class="tag" taget="_blank" href="/search/what/1.htm">what</a><a class="tag" taget="_blank" href="/search/Asciidoctor/1.htm">Asciidoctor</a> <div>WhatisAsciidoctorWhatisSyntaxAsciidoctorDiagramInstallReferenceWhatisAsciidoctor是一种快速的文本处理器和出版工具链,可以非常方便地将AsciiDoc转化成HTML5、DocBook5或者4.5、EPUB3、PDF以及其他格式。Asciidoctor是AsciiDoc语法的一种主要实现。AsciiDoc最早是由基于Pyt</div> </li> <li><a href="/article/1726645202736721920.htm" title="XML编辑器oXygen XML Editor V19大版本更新 | 附下载" target="_blank">XML编辑器oXygen XML Editor V19大版本更新 | 附下载</a> <span class="text-muted">weixin_33871366</span> <a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/markdown/1.htm">markdown</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/ViewUI/1.htm">ViewUI</a> <div>2019独角兽企业重金招聘Python工程师标准>>>oXygenXMLEditorv19更新快速创建多个主题新的快速创建主题功能允许您一次快速创建多个新主题,您可以在创建时在DITA映射表中指定其层次结构。此功能的常见用例是当您需要插入具有多个主题的新章节或部分时,并提前计划结构和标题。支持DocBook5.1更新了OxygenDocBook框架以支持DocBook5.1。这包括用于组装和主题文</div> </li> <li><a href="/article/1726280950821761024.htm" title="【大版本】XML编辑器oXygen XML Editor V19.1发布 | 附下载" target="_blank">【大版本】XML编辑器oXygen XML Editor V19.1发布 | 附下载</a> <span class="text-muted">weixin_33693070</span> <a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/markdown/1.htm">markdown</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/ViewUI/1.htm">ViewUI</a> <div>2019独角兽企业重金招聘Python工程师标准>>>oXygenXMLEditorv19.1更新DITA可重用组件视图中的“新建组件”选项卡新的“组件”选项卡已添加到“DITA可重用组件”视图中,从根图中的所有主题中收集可重用组件(具有ID的元素),并将其标记为仅资源,并提供了一种非常快速简单的方法来在文档中插入内容引用。可用组件列表还包括过滤和搜索特定可重用组件的方法。支持DocBook5.1</div> </li> <li><a href="/article/1726279419921772544.htm" title="【大版本】XML编辑器oXygen XML Editor V19.1发布 | 支持DocBook 5.1" target="_blank">【大版本】XML编辑器oXygen XML Editor V19.1发布 | 支持DocBook 5.1</a> <span class="text-muted">cocacola456</span> <a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%2F%E6%8E%A7%E4%BB%B6%E6%9B%B4%E6%96%B0/1.htm">软件/控件更新</a><a class="tag" taget="_blank" href="/search/oXygen/1.htm">oXygen</a><a class="tag" taget="_blank" href="/search/XML/1.htm">XML</a><a class="tag" taget="_blank" href="/search/Editor/1.htm">Editor</a><a class="tag" taget="_blank" href="/search/XML%E7%BC%96%E8%BE%91%E5%99%A8/1.htm">XML编辑器</a><a class="tag" taget="_blank" href="/search/XML/1.htm">XML</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E8%BE%91%E5%99%A8/1.htm">编辑器</a><a class="tag" taget="_blank" href="/search/%E6%9B%B4%E6%96%B0/1.htm">更新</a> <div>oXygenXMLEditorv19.1更新DITA可重用组件视图中的“新建组件”选项卡新的“组件”选项卡已添加到“DITA可重用组件”视图中,从根图中的所有主题中收集可重用组件(具有ID的元素),并将其标记为仅资源,并提供了一种非常快速简单的方法来在文档中插入内容引用。可用组件列表还包括过滤和搜索特定可重用组件的方法。支持DocBook5.1更新了OxygenDocBook框架以支持DocBoo</div> </li> <li><a href="/article/1719233251467407360.htm" title="ASCII字符集详解" target="_blank">ASCII字符集详解</a> <span class="text-muted">wzyzzu</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>http://www.crifan.com/files/doc/docbook/char_encoding/release/webhelp/content/ascii_ctrl_char.html字符编码详解2.1.2.ASCII编码规则2.1.2.1.ASCII字符集中的功能/控制字符2.1.2.1.1.什么是FunctionCode功能码或FunctionCharacter功能字符2.1.2.</div> </li> <li><a href="/article/1705677780152299520.htm" title="职场中必用的Markdown语法介绍!!!!" target="_blank">职场中必用的Markdown语法介绍!!!!</a> <span class="text-muted">质料库_d14c</span> <div>一、什么是MarkdownMarkdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。Markdown具有一系列衍生版本,用于扩展Markdown的功能(如表格、脚注、内嵌HTML等等),这些功能原初的Markdown尚不具备,它们能让Markdown转换成更多的格式,例如LaTeX,Docbook。Markdown增强版中比较有名的有Mar</div> </li> <li><a href="/article/1703258065068961792.htm" title="linux 复制文件pdf到另一个文件夹,【已解决】用find和cp组合实现将find出来的文件批量拷贝到目标文件夹..." target="_blank">linux 复制文件pdf到另一个文件夹,【已解决】用find和cp组合实现将find出来的文件批量拷贝到目标文件夹...</a> <span class="text-muted">吴炳忠</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%A4%8D%E5%88%B6%E6%96%87%E4%BB%B6pdf%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E5%A4%B9/1.htm">复制文件pdf到另一个文件夹</a> <div>【背景】想要将find出来的一堆文件,用cp去拷贝到目标文件夹。但是自己试了试find和xarg,结果没搞定。注:之前已经折腾了:和:但是现在还是无法实现所需要的效果。【折腾过程】1.后来参考:去试试:CLi@PC-CLI-1/cygdrive/d/to_del/docbook$find.-name*.pdf./arm_vs_mips/release/pdf/arm_vs_mips.pdf./bi</div> </li> <li><a href="/article/1670569708061024256.htm" title="[Linux 基础] -- V4L2框架-media device" target="_blank">[Linux 基础] -- V4L2框架-media device</a> <span class="text-muted">BestW2Y</span> <a class="tag" taget="_blank" href="/search/Linux%E5%9F%BA%E7%A1%80/1.htm">Linux基础</a><a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/v4l2/1.htm">v4l2</a><a class="tag" taget="_blank" href="/search/media/1.htm">media</a><a class="tag" taget="_blank" href="/search/framework/1.htm">framework</a> <div>本文对V4L2的运行时数据流设备管理做一个详细的介绍,包括什么叫[运行时设备管理],它是干什么用的,怎么使用等等。本文的目标是掌握meidadevice的编码使用方法以及功能运用。一、mediaframework1.1、简介相关的控制API在Documentation/DocBook/media/v4l/media-controller.xml,本文档聚焦于内核测的media框架实现。注意:直接查</div> </li> <li><a href="/article/1644774032802897920.htm" title="markdown的使用及介绍" target="_blank">markdown的使用及介绍</a> <span class="text-muted">清茶_77a0</span> <div>介绍Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。Markdown具有一系列衍生版本,用于扩展Markdown的功能(如表格、脚注、内嵌HTML等等),这些功能原初的Markdown尚不具备,它们能让Markdown转换成更多的格式,例如LaTeX,Docbook。Markdown增强版中比较有名的有MarkdownExtra、</div> </li> <li><a href="/article/1637188051878862848.htm" title="2018-04-08" target="_blank">2018-04-08</a> <span class="text-muted">davidxwwang</span> <div>andriodNDK:Google为便于Android开发提供的一种原生开发集(NativeDevelopmentKit),可以帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成APK与NDK密切相关的另一个词汇则是JNI,它是NDK开发中的枢纽https://www.crifan.com/files/doc/docbook/cross_compile/release</div> </li> <li><a href="/article/1626970376959479808.htm" title="什么是Markdown" target="_blank">什么是Markdown</a> <span class="text-muted">Shi_wen</span> <div>Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。Markdown具有一系列衍生版本,用于扩展Markdown的功能(如表格、脚注、内嵌HTML等等),这些功能原初的Markdown尚不具备,它们能让Markdown转换成更多的格式,例如LaTeX,Docbook。Markdown增强版中比较有名的有MarkdownExtra、Mu</div> </li> <li><a href="/article/1580180573253615616.htm" title="使用 EPUB 制作数字图书" target="_blank">使用 EPUB 制作数字图书</a> <span class="text-muted">vipwangjun</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/DocBook/1.htm">DocBook</a><a class="tag" taget="_blank" href="/search/XSL/1.htm">XSL</a><a class="tag" taget="_blank" href="/search/opf/1.htm">opf</a><a class="tag" taget="_blank" href="/search/ncx/1.htm">ncx</a><a class="tag" taget="_blank" href="/search/epub/1.htm">epub</a><a class="tag" taget="_blank" href="/search/%E7%94%B5%E5%AD%90%E4%B9%A6/1.htm">电子书</a> <div>摘要:是否需要分发文档、创建电子图书或者把喜欢的博客文章存档?EPUB是一种开放式的数字图书规范,以常用的技术如XML、CSS和XHTML为基础,EPUB文件可在便携式的e-ink设备、移动电话和桌面计算机上阅读。本教程详细阐述了EPUB格式,首先用Java™技术示范了EPUB验证,然后详细说明如何使用DocBook和Python自动创建EPUB。开始之前本教程讲述如何创建EPUB格式的电子图书。</div> </li> <li><a href="/article/1580178875101560832.htm" title="使用 EPUB 制作数字图书 基于 XML 的开放式 eBook 格式" target="_blank">使用 EPUB 制作数字图书 基于 XML 的开放式 eBook 格式</a> <span class="text-muted">weixin_34236497</span> <a class="tag" taget="_blank" href="/search/xhtml/1.htm">xhtml</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/1.htm">操作系统</a> <div>/Page1简介:是否需要分发文档、创建电子图书或者把喜欢的博客文章存档?EPUB是一种开放式的数字图书规范,以常用的技术如XML、CSS和XHTML为基础,EPUB文件可在便携式的e-ink设备、移动电话和桌面计算机上阅读。本教程详细阐述了EPUB格式,首先用Java™技术示范了EPUB验证,然后详细说明如何使用DocBook和Python自动创建EPUB。开始之前本教程讲述如何创建EPUB格式</div> </li> <li><a href="/article/1444667157760749568.htm" title="树莓派4B使用Geany编写C程序" target="_blank">树莓派4B使用Geany编写C程序</a> <span class="text-muted">TomLazy</span> <a class="tag" taget="_blank" href="/search/%E6%A0%91%E8%8E%93%E6%B4%BE/1.htm">树莓派</a><a class="tag" taget="_blank" href="/search/%E6%A0%91%E8%8E%93%E6%B4%BE4B/1.htm">树莓派4B</a><a class="tag" taget="_blank" href="/search/C/1.htm">C</a><a class="tag" taget="_blank" href="/search/Geany/1.htm">Geany</a> <div>文章目录一、简介二、环境准备1、Geany三、具体步骤1、Geany一、简介  本篇文章主要是为了记录如何在树莓派4B中方便快捷的编译运行C程序,方法有很多,后期遇到新的方法可能会继续更新。二、环境准备1、Geany  Geany是一个小巧的使用GTK+2开发的跨平台的开源集成开发环境,支持的文件类型有:C,CPP,Java,Python,PHP,HTML,DocBook,Perl,LaTeX和B</div> </li> <li><a href="/article/1738527451094507520.htm" title="markdown使用" target="_blank">markdown使用</a> <span class="text-muted">Fairy_妍</span> <div>介绍Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。Markdown具有一系列衍生版本,用于扩展Markdown的功能(如表格、脚注、内嵌HTML等等),这些功能原初的Markdown尚不具备,它们能让Markdown转换成更多的格式,例如LaTeX,Docbook。Markdown增强版中比较有名的有MarkdownExtra、</div> </li> <li><a href="/article/1390327886208126976.htm" title="Markdown 的简单使用" target="_blank">Markdown 的简单使用</a> <span class="text-muted">宁远_1号</span> <div>一、简介Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。Markdown具有一系列衍生版本,用于扩展Markdown的功能(如表格、脚注、内嵌HTML等等),这些功能原初的Markdown尚不具备,它们能让Markdown转换成更多的格式,例如LaTeX,Docbook。Markdown增强版中比较有名的有MarkdownExtr</div> </li> <li><a href="/article/1389592321594576896.htm" title="开源文档的五个趋势" target="_blank">开源文档的五个趋势</a> <span class="text-muted">openqt</span> <div>开源文档的五个趋势ShaunMcCanceimage我在开源文档这方面做过很长时间。在过去的二十年里,关于创作和出版方面的看法改变过很多次。有些趋势看起来是在兜圈子,比如说语义标记的流行。最近的趋势则是文档向代码靠拢,即所谓的文档如代码。我们来看看文档趋势的几个大方向。1.Git当我最开始在GNOME做文档工作的时候,我们用DocBook写文档并与代码一起存在CVS里。现在GNOME用Mallar</div> </li> <li><a href="/article/1314631129281699840.htm" title="『阿男的XML教程』*01*开篇文章" target="_blank">『阿男的XML教程』*01*开篇文章</a> <span class="text-muted">阿男weli</span> <div>在软件工程领域,xml数据格式应用的非常广泛:在WebService领域,xml是主流的数据交换格式;在出版业,docbook使用xml格式进行书籍的排版;在安全领域,SAML标准使用xml数据。因此阿男准备写一套xml的教程,介绍xml的方方面面,希望对大家有帮助。此为开篇,从下一篇文章开始讲解具体内容。『阿男的XML教程』*01*开篇</div> </li> <li><a href="/article/1306508739418820608.htm" title="Notepad++的列编辑功能" target="_blank">Notepad++的列编辑功能</a> <span class="text-muted">不粘人的小妖精</span> <a class="tag" taget="_blank" href="/search/NotePad%2B%2B/1.htm">NotePad++</a><a class="tag" taget="_blank" href="/search/NotePad%2B%2B/1.htm">NotePad++</a> <div>本文网址:https://www.crifan.com/files/doc/docbook/rec_soft_npp/release/htmls/npp_function_column_mode.htmlNotepad++介绍全目录:https://www.crifan.com/files/doc/docbook/rec_soft_npp/release/htmls/index.html3.6.N</div> </li> <li><a href="/article/1305998945519964160.htm" title="V4L2框架-media device" target="_blank">V4L2框架-media device</a> <span class="text-muted">YellowMax2001</span> <a class="tag" taget="_blank" href="/search/linux-V4L2/1.htm">linux-V4L2</a><a class="tag" taget="_blank" href="/search/V4L2%E6%A1%86%E6%9E%B6%E5%85%A8%E8%A7%A3%E6%9E%90/1.htm">V4L2框架全解析</a><a class="tag" taget="_blank" href="/search/v4l2/1.htm">v4l2</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/media/1.htm">media</a><a class="tag" taget="_blank" href="/search/framework/1.htm">framework</a> <div>阅读原文本文对V4L2的运行时数据流设备管理做一个详细的介绍,包括什么叫「运行时设备管理」,它是干什么用的,怎么使用等等。本文的目标是掌握mediadevice的编码使用方法以及功能运用。01-V4L2框架-v4l2device00-V4L2框架概述mediaframework简介相关的控制API在Documentation/DocBook/media/v4l/media-controller.x</div> </li> <li><a href="/article/1305710029101371392.htm" title="mosquitto编译报错: compilation error: file libmosquitto.3.xml line 4 element refentry" target="_blank">mosquitto编译报错: compilation error: file libmosquitto.3.xml line 4 element refentry</a> <span class="text-muted">Alen.Wang</span> <a class="tag" taget="_blank" href="/search/linux%E7%9B%B8%E5%85%B3%E7%9A%84%E9%94%99%E8%AF%AF%E8%B0%83%E8%AF%95/1.htm">linux相关的错误调试</a> <div>编译版本:mosquitto1.6.6编译报错:compilationerror:filelibmosquitto.3.xmlline4elementrefentrywarning:failedtoloadexternalentity"http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl"compilatio</div> </li> <li><a href="/article/1305616283768754176.htm" title="乱序执行和内存屏障" target="_blank">乱序执行和内存屏障</a> <span class="text-muted">joancruise</span> <a class="tag" taget="_blank" href="/search/computer/1.htm">computer</a><a class="tag" taget="_blank" href="/search/architecture/1.htm">architecture</a> <div>乱序执行和内存屏障最近写的一些关于在驱动程序开发中会遇到的关于乱序执行问题的短文,都是些通用的技术,贴上来share。另外,禁止转载。ps:这玩意原本是用Docbook写得,转过来还真是麻烦~~处理器的乱序和并发执行目前的高级处理器,为了提高内部逻辑元件的利用率以提高运行速度,通常会采用多指令发射、乱序执行等各种措施。现在普遍使用的一些超标量处理器通常能够在一个指令周期内并发执行多条指令。处理器从</div> </li> <li><a href="/article/1305427223402024960.htm" title="Markdown及Typora编辑器的基本使用" target="_blank">Markdown及Typora编辑器的基本使用</a> <span class="text-muted">blackvon</span> <a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6/1.htm">软件</a><a class="tag" taget="_blank" href="/search/%E5%8A%9E%E5%85%AC%E8%BD%AF%E4%BB%B6/1.htm">办公软件</a><a class="tag" taget="_blank" href="/search/markdown/1.htm">markdown</a> <div>MarkDown介绍Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。Markdown具有一系列衍生版本,用于扩展Markdown的功能(如表格、脚注、内嵌HTML等等),这些功能原初的Markdown尚不具备,它们能让Markdown转换成更多的格式,例如LaTeX,Docbook。Markdown增强版中比较有名的有Markdo</div> </li> <li><a href="/article/1304898498403012608.htm" title="centos7安装git" target="_blank">centos7安装git</a> <span class="text-muted">jygeye</span> <a class="tag" taget="_blank" href="/search/git/1.htm">git</a><a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a> <div>1.安装依赖项sudodnfinstallcurl-devleexpat-develgettext-developenssl-develzlib-develsudodnfinstallgccperl-ExtUtils-MakeMakersudodnfinstallasciidocxmltosudodnfinstalldocbook2Xcd/usr/bin/ln-sdb2x_docbook2texi</div> </li> <li><a href="/article/35.htm" title="JVM StackMapTable 属性的作用及理解" target="_blank">JVM StackMapTable 属性的作用及理解</a> <span class="text-muted">lijingyao8206</span> <a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/%E5%AD%97%E8%8A%82%E7%A0%81/1.htm">字节码</a><a class="tag" taget="_blank" href="/search/Class%E6%96%87%E4%BB%B6/1.htm">Class文件</a><a class="tag" taget="_blank" href="/search/StackMapTable/1.htm">StackMapTable</a> <div>        在Java 6版本之后JVM引入了栈图(Stack Map Table)概念。为了提高验证过程的效率,在字节码规范中添加了Stack Map Table属性,以下简称栈图,其方法的code属性中存储了局部变量和操作数的类型验证以及字节码的偏移量。也就是一个method需要且仅对应一个Stack Map Table。在Java 7版</div> </li> <li><a href="/article/162.htm" title="回调函数调用方法" target="_blank">回调函数调用方法</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>最近在看大神写的代码时,.发现其中使用了很多的回调 ,以前只是在学习的时候经常用到 ,现在写个笔记 记录一下   代码很简单:           MainDemo  :调用方法  得到方法的返回结果         </div> </li> <li><a href="/article/289.htm" title="[时间机器]制造时间机器需要一些材料" target="_blank">[时间机器]制造时间机器需要一些材料</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E5%88%B6%E9%80%A0/1.htm">制造</a> <div>      根据我的计算和推测,要完全实现制造一台时间机器,需要某些我们这个世界不存在的物质     和材料...       甚至可以这样说,这种材料和物质,我们在反应堆中也无法获得......      </div> </li> <li><a href="/article/416.htm" title="开口埋怨不如闭口做事" target="_blank">开口埋怨不如闭口做事</a> <span class="text-muted">邓集海</span> <a class="tag" taget="_blank" href="/search/%E9%82%93%E9%9B%86%E6%B5%B7+%E5%81%9A%E4%BA%BA+%E5%81%9A%E4%BA%8B+%E5%B7%A5%E4%BD%9C/1.htm">邓集海 做人 做事 工作</a> <div>“开口埋怨,不如闭口做事。”不是名人名言,而是一个普通父亲对儿子的训导。但是,因为这句训导,这位普通父亲却造就了一个名人儿子。这位普通父亲造就的名人儿子,叫张明正。      张明正出身贫寒,读书时成绩差,常挨老师批评。高中毕业,张明正连普通大学的分数线都没上。高考成绩出来后,平时开口怨这怨那的张明正,不从自身找原因,而是不停地埋怨自己家庭条件不好、埋怨父母没有给他创造良好的学习环境。      </div> </li> <li><a href="/article/543.htm" title="jQuery插件开发全解析,类级别与对象级别开发" target="_blank">jQuery插件开发全解析,类级别与对象级别开发</a> <span class="text-muted">IT独行者</span> <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91/1.htm">开发</a><a class="tag" taget="_blank" href="/search/%E6%8F%92%E4%BB%B6%E3%80%80/1.htm">插件 </a><a class="tag" taget="_blank" href="/search/%E5%87%BD%E6%95%B0/1.htm">函数</a> <div>jQuery插件的开发包括两种: 一种是类级别的插件开发,即给 jQuery添加新的全局函数,相当于给 jQuery类本身添加方法。 jQuery的全局函数就是属于 jQuery命名空间的函数,另一种是对象级别的插件开发,即给 jQuery对象添加方法。下面就两种函数的开发做详细的说明。   1 、类级别的插件开发 类级别的插件开发最直接的理解就是给jQuer</div> </li> <li><a href="/article/670.htm" title="Rome解析Rss" target="_blank">Rome解析Rss</a> <span class="text-muted">413277409</span> <a class="tag" taget="_blank" href="/search/Rome%E8%A7%A3%E6%9E%90Rss/1.htm">Rome解析Rss</a> <div>import java.net.URL;  import java.util.List;    import org.junit.Test;    import com.sun.syndication.feed.synd.SyndCategory;  import com.sun.syndication.feed.synd.S</div> </li> <li><a href="/article/797.htm" title="RSA加密解密" target="_blank">RSA加密解密</a> <span class="text-muted">无量</span> <a class="tag" taget="_blank" href="/search/%E5%8A%A0%E5%AF%86/1.htm">加密</a><a class="tag" taget="_blank" href="/search/%E8%A7%A3%E5%AF%86/1.htm">解密</a><a class="tag" taget="_blank" href="/search/rsa/1.htm">rsa</a> <div>RSA加密解密代码 代码有待整理 package com.tongbanjie.commons.util; import java.security.Key; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerat</div> </li> <li><a href="/article/924.htm" title="linux 软件安装遇到的问题" target="_blank">linux 软件安装遇到的问题</a> <span class="text-muted">aichenglong</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E9%81%87%E5%88%B0%E7%9A%84%E9%97%AE%E9%A2%98/1.htm">遇到的问题</a><a class="tag" taget="_blank" href="/search/ftp/1.htm">ftp</a> <div>1 ftp配置中遇到的问题    500 OOPS: cannot change directory   出现该问题的原因:是SELinux安装机制的问题.只要disable SELinux就可以了   修改方法:1 修改/etc/selinux/config 中SELINUX=disabled    2 source /etc</div> </li> <li><a href="/article/1051.htm" title="面试心得" target="_blank">面试心得</a> <span class="text-muted">alafqq</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a> <div>最近面试了好几家公司。记录下; 支付宝,面试我的人胖胖的,看着人挺好的;博彦外包的职位,面试失败; 阿里金融,面试官人也挺和善,只不过我让他吐血了。。。 由于印象比较深,记录下; 1,自我介绍 2,说下八种基本类型;(算上string。楼主才答了3种,哈哈,string其实不是基本类型,是引用类型) 3,什么是包装类,包装类的优点; 4,平时看过什么书?NND,什么书都没看过。。照样</div> </li> <li><a href="/article/1178.htm" title="java的多态性探讨" target="_blank">java的多态性探讨</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>java的多态性是指main方法在调用属性的时候类可以对这一属性做出反应的情况 //package 1; class A{ public void test(){ System.out.println("A"); } } class D extends A{ public void test(){ S</div> </li> <li><a href="/article/1305.htm" title="网络编程基础篇之JavaScript-学习笔记" target="_blank">网络编程基础篇之JavaScript-学习笔记</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a> <div>1.documentWrite <html> <head> <script language="JavaScript"> document.write("这是电脑网络学校"); document.close(); </script> </h</div> </li> <li><a href="/article/1432.htm" title="探索JUnit4扩展:深入Rule" target="_blank">探索JUnit4扩展:深入Rule</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/JUnit/1.htm">JUnit</a><a class="tag" taget="_blank" href="/search/Rule/1.htm">Rule</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a> <div>        本文将进一步探究Rule的应用,展示如何使用Rule来替代@BeforeClass,@AfterClass,@Before和@After的功能。         在上一篇中提到,可以使用Rule替代现有的大部分Runner扩展,而且也不提倡对Runner中的withBefores(),withAfte</div> </li> <li><a href="/article/1559.htm" title="[CSS]CSS浮动十五条规则" target="_blank">[CSS]CSS浮动十五条规则</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/css/1.htm">css</a> <div>这些浮动规则,主要是参考CSS权威指南关于浮动规则的总结,然后添加一些简单的例子以验证和理解这些规则。   1. 所有的页面元素都可以浮动 2. 一个元素浮动后,会成为块级元素,比如<span>,a, strong等都会变成块级元素 3.一个元素左浮动,会向最近的块级父元素的左上角移动,直到浮动元素的左外边界碰到块级父元素的左内边界;如果这个块级父元素已经有浮动元素停靠了</div> </li> <li><a href="/article/1686.htm" title="【Kafka六】Kafka Producer和Consumer多Broker、多Partition场景" target="_blank">【Kafka六】Kafka Producer和Consumer多Broker、多Partition场景</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/partition/1.htm">partition</a> <div>0.Kafka服务器配置 3个broker 1个topic,6个partition,副本因子是2 2个consumer,每个consumer三个线程并发读取   1. Producer package kafka.examples.multibrokers.producers; import java.util.Properties; import java.util.</div> </li> <li><a href="/article/1813.htm" title="zabbix_agentd.conf配置文件详解" target="_blank">zabbix_agentd.conf配置文件详解</a> <span class="text-muted">ronin47</span> <a class="tag" taget="_blank" href="/search/zabbix+%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6/1.htm">zabbix 配置文件</a> <div>Aliaskey的别名,例如 Alias=ttlsa.userid:vfs.file.regexp[/etc/passwd,^ttlsa:.:([0-9]+),,,,\1], 或者ttlsa的用户ID。你可以使用key:vfs.file.regexp[/etc/passwd,^ttlsa:.: ([0-9]+),,,,\1],也可以使用ttlsa.userid。备注: 别名不能重复,但是可以有多个</div> </li> <li><a href="/article/1940.htm" title="java--19.用矩阵求Fibonacci数列的第N项" target="_blank">java--19.用矩阵求Fibonacci数列的第N项</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/fibonacci/1.htm">fibonacci</a> <div>参考了网上的思路,写了个Java版的: public class Fibonacci { final static int[] A={1,1,1,0}; public static void main(String[] args) { int n=7; for(int i=0;i<=n;i++){ int f=fibonac</div> </li> <li><a href="/article/2067.htm" title="Netty源码学习-LengthFieldBasedFrameDecoder" target="_blank">Netty源码学习-LengthFieldBasedFrameDecoder</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/netty/1.htm">netty</a> <div>先看看LengthFieldBasedFrameDecoder的官方API http://docs.jboss.org/netty/3.1/api/org/jboss/netty/handler/codec/frame/LengthFieldBasedFrameDecoder.html API举例说明了LengthFieldBasedFrameDecoder的解析机制,如下: 实</div> </li> <li><a href="/article/2194.htm" title="AES加密解密" target="_blank">AES加密解密</a> <span class="text-muted">chicony</span> <a class="tag" taget="_blank" href="/search/%E5%8A%A0%E5%AF%86%E8%A7%A3%E5%AF%86/1.htm">加密解密</a> <div>AES加解密算法,使用Base64做转码以及辅助加密: package com.wintv.common; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import sun.misc.BASE64Decod</div> </li> <li><a href="/article/2321.htm" title="文件编码格式转换" target="_blank">文件编码格式转换</a> <span class="text-muted">ctrain</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A0%81%E6%A0%BC%E5%BC%8F/1.htm">编码格式</a> <div> package com.test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; </div> </li> <li><a href="/article/2448.htm" title="mysql 在linux客户端插入数据中文乱码" target="_blank">mysql 在linux客户端插入数据中文乱码</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81/1.htm">中文乱码</a> <div>1、查看系统客户端,数据库,连接层的编码  查看方法: http://daizj.iteye.com/blog/2174993 进入mysql,通过如下命令查看数据库编码方式: mysql>  show variables like 'character_set_%'; +--------------------------+------</div> </li> <li><a href="/article/2575.htm" title="好代码是廉价的代码" target="_blank">好代码是廉价的代码</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/%E8%AF%BB%E4%B9%A6/1.htm">读书</a> <div>  长久以来我一直主张:好代码是廉价的代码。 当我跟做开发的同事说出这话时,他们的第一反应是一种惊愕,然后是将近一个星期的嘲笑,把它当作一个笑话来讲。 当他们走近看我的表情、知道我是认真的时,才收敛一点。 当最初的惊愕消退后,他们会用一些这样的话来反驳: “好代码不廉价,好代码是采用经过数十年计算机科学研究和积累得出的最佳实践设计模式和方法论建立起来的精心制作的程序代码。” 我只</div> </li> <li><a href="/article/2702.htm" title="Android网络请求库——android-async-http" target="_blank">Android网络请求库——android-async-http</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>在iOS开发中有大名鼎鼎的ASIHttpRequest库,用来处理网络请求操作,今天要介绍的是一个在Android上同样强大的网络请求库android-async-http,目前非常火的应用Instagram和Pinterest的Android版就是用的这个网络请求库。这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通</div> </li> <li><a href="/article/2829.htm" title="ORACLE 复习笔记之SQL语句的优化" target="_blank">ORACLE 复习笔记之SQL语句的优化</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/SQL%E4%BC%98%E5%8C%96/1.htm">SQL优化</a><a class="tag" taget="_blank" href="/search/Oracle+sql%E8%AF%AD%E5%8F%A5%E4%BC%98%E5%8C%96/1.htm">Oracle sql语句优化</a><a class="tag" taget="_blank" href="/search/SQL%E8%AF%AD%E5%8F%A5%E7%9A%84%E4%BC%98%E5%8C%96/1.htm">SQL语句的优化</a> <div>转载请出自出处:http://eksliang.iteye.com/blog/2097999   SQL语句的优化总结如下   sql语句的优化可以按照如下六个步骤进行: 合理使用索引 避免或者简化排序 消除对大表的扫描 避免复杂的通配符匹配 调整子查询的性能 EXISTS和IN运算符 下面我就按照上面这六个步骤分别进行总结: </div> </li> <li><a href="/article/2956.htm" title="浅析:Android 嵌套滑动机制(NestedScrolling)" target="_blank">浅析:Android 嵌套滑动机制(NestedScrolling)</a> <span class="text-muted">gg163</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E7%A7%BB%E5%8A%A8%E5%BC%80%E5%8F%91/1.htm">移动开发</a><a class="tag" taget="_blank" href="/search/%E6%BB%91%E5%8A%A8%E6%9C%BA%E5%88%B6/1.htm">滑动机制</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%A5%97/1.htm">嵌套</a> <div>谷歌在发布安卓 Lollipop版本之后,为了更好的用户体验,Google为Android的滑动机制提供了NestedScrolling特性 NestedScrolling的特性可以体现在哪里呢?<!--[if !supportLineBreakNewLine]--><!--[endif]--> 比如你使用了Toolbar,下面一个ScrollView,向上滚</div> </li> <li><a href="/article/3083.htm" title="使用hovertree菜单作为后台导航" target="_blank">使用hovertree菜单作为后台导航</a> <span class="text-muted">hvt</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/hovertree/1.htm">hovertree</a><a class="tag" taget="_blank" href="/search/asp.net/1.htm">asp.net</a> <div>  hovertree是一个jquery菜单插件,官方网址:http://keleyi.com/jq/hovertree/ ,可以登录该网址体验效果。 0.1.3版本:http://keleyi.com/jq/hovertree/demo/demo.0.1.3.htm hovertree插件包含文件: http://keleyi.com/jq/hovertree/css</div> </li> <li><a href="/article/3210.htm" title="SVG 教程 (二)矩形" target="_blank">SVG 教程 (二)矩形</a> <span class="text-muted">天梯梦</span> <a class="tag" taget="_blank" href="/search/svg/1.htm">svg</a> <div>SVG <rect> SVG Shapes SVG有一些预定义的形状元素,可被开发者使用和操作: 矩形 <rect> 圆形 <circle> 椭圆 <ellipse> 线 <line> 折线 <polyline> 多边形 <polygon> 路径 <path> </div> </li> <li><a href="/article/3337.htm" title="一个简单的队列" target="_blank">一个简单的队列</a> <span class="text-muted">luyulong</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E9%98%9F%E5%88%97/1.htm">队列</a> <div> public class MyQueue { private long[] arr; private int front; private int end; // 有效数据的大小 private int elements; public MyQueue() { arr = new long[10]; elements = 0; front </div> </li> <li><a href="/article/3464.htm" title="基础数据结构和算法九:Binary Search Tree" target="_blank">基础数据结构和算法九:Binary Search Tree</a> <span class="text-muted">sunwinner</span> <a class="tag" taget="_blank" href="/search/Algorithm/1.htm">Algorithm</a> <div>  A binary search tree (BST) is a binary tree where each node has a Comparable key (and an associated value) and satisfies the restriction that the key in any node is larger than the keys in all</div> </li> <li><a href="/article/3591.htm" title="项目出现的一些问题和体会" target="_blank">项目出现的一些问题和体会</a> <span class="text-muted">Steven-Walker</span> <a class="tag" taget="_blank" href="/search/DAO/1.htm">DAO</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a> <div>     第一篇博客不知道要写点什么,就先来点近阶段的感悟吧。     这几天学了servlet和数据库等知识,就参照老方的视频写了一个简单的增删改查的,完成了最简单的一些功能,使用了三层架构。 dao层完成的是对数据库具体的功能实现,service层调用了dao层的实现方法,具体对servlet提供支持。  &</div> </li> <li><a href="/article/3718.htm" title="高手问答:Java老A带你全面提升Java单兵作战能力!" target="_blank">高手问答:Java老A带你全面提升Java单兵作战能力!</a> <span class="text-muted">ITeye管理员</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>本期特邀《Java特种兵》作者:谢宇,CSDN论坛ID: xieyuooo 针对JAVA问题给予大家解答,欢迎网友积极提问,与专家一起讨论! 作者简介: 淘宝网资深Java工程师,CSDN超人气博主,人称“胖哥”。 CSDN博客地址: http://blog.csdn.net/xieyuooo 作者在进入大学前是一个不折不扣的计算机白痴,曾经被人笑话过不懂鼠标是什么,</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>