2011-09-01 42 views
1

假设我有一个XML文件:XSL或XSLT或XSLFO:它可以扩展文本?

<document> 
    <title>How the West was Won</title> 
    <chapter> 
    Lorem Ipsum Blah ..... 
    </chapter> 
</document> 

是否可以使用XSLT或XSLFO或XSL来呈现标题是这样的:

How the West was Won 
-------------------- 

Lorem Ipsum Blah ..... 

我怎么会在产生短线的正确数量标题后面的行?

+1

渲染它在什么? PDF(XSL-FO)?文本(XSL-T)? XHTML/HTML(XSL-T)? –

+0

对不起,我应该说..纯文本。我所追求的是采用rst2html的xml输出并制作一个格式化的文本文件。 – JeffG

回答

1

试试这个:

<xsl:template match="title"> 
    <xsl:value-of select="text()"/> 
    <xsl:text> 
    </xsl:text> 
    <xsl:call-template name="Underline"> 
    <xsl:with-param name="length" select="string-length(text())"/> 
    </xsl:call-template> 
    </xsl:template> 

    <xsl:template name="Underline"> 
    <xsl:param name="length"/> 
    <xsl:choose> 
     <xsl:when test="$length > 0">-<xsl:call-template name="Underline"><xsl:with-param name="length" select="$length - 1"/></xsl:call-template></xsl:when> 
    </xsl:choose>  
    </xsl:template> 

Underline是输出破折号给定数目的递归模板。

+0

谢谢,这正是我所需要的。 – JeffG

2

我知道这是很典型的,但你也可以使用模板模式:

<xsl:template match="title"> 
     <xsl:variable name="dashes"> 
      <xsl:apply-templates select="." mode="dashes"/> 
     </xsl:variable> 
     <xsl:value-of select="concat(.,'&#10;',$dashes,'&#10;')"/> 
    </xsl:template> 

    <xsl:template match="text()" mode="dashes"> 
     <xsl:param name="length" select="string-length() - 1"/> 
     <xsl:text>-</xsl:text> 
     <xsl:apply-templates select="self::text()[boolean($length)]" 
      mode="dashes"> 
      <xsl:with-param name="length" select="$length - 1"/> 
     </xsl:apply-templates> 
    </xsl:template> 
+0

我有输出方法设置为文本(尽管我没有从我的文件顶部排除XML声明)。模板如何生成破折号? – JeffG

+0

我已经更新了我的答案。 –

1

这是XSLT 2.0中更简单的另一种情况。

<xsl:for-each select="1 to string-length(title)">-</xsl:for-each> 
+0

这是更清洁。我希望创建一个返回“=”“ - ”或“〜”的函数,具体取决于标签嵌套在其他标题中的深度级别。 – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/253444/">JeffG</a></span> <span></span> </small> </span> </p> </div> </div> </div> </div> </div> </article> </div> <div class="clearfix"> </div> <div class="relative-box"> <div class="relative">相关问题</div> <ul class="relative_list"> <li> 1. <a href="http://cn.voidcc.com/question/p-zrigmfnl-bq.html" target="_blank" title="div不扩展表扩展,或div不扩展当它扩大"> div不扩展表扩展,或div不扩展当它扩大 </a> </li> <li> 2. <a href="http://cn.voidcc.com/question/p-rzcraptb-md.html" target="_blank" title="我可以修改或扩展ChartJS吗?"> 我可以修改或扩展ChartJS吗? </a> </li> <li> 3. <a href="http://cn.voidcc.com/question/p-aqmlnzkv-og.html" target="_blank" title="是否可以“扩展”或重新使用Eclipse扩展点?"> 是否可以“扩展”或重新使用Eclipse扩展点? </a> </li> <li> 4. <a href="http://cn.voidcc.com/question/p-zzedqhtt-gr.html" target="_blank" title="现在或以后扩展?"> 现在或以后扩展? </a> </li> <li> 5. <a href="http://cn.voidcc.com/question/p-cbapnkmq-nt.html" target="_blank" title="点击它可以展开JTextArea或JTextPane?"> 点击它可以展开JTextArea或JTextPane? </a> </li> <li> 6. <a href="http://cn.voidcc.com/question/p-opaeqrap-gk.html" target="_blank" title="是否可以在VisualStudio的XSLT编辑器中使用XSLT扩展(sitecore扩展)?"> 是否可以在VisualStudio的XSLT编辑器中使用XSLT扩展(sitecore扩展)? </a> </li> <li> 7. <a href="http://cn.voidcc.com/question/p-ekoanhtv-pz.html" target="_blank" title="xsl-stylesheet或xslt-styleshhet,一个和相同?"> xsl-stylesheet或xslt-styleshhet,一个和相同? </a> </li> <li> 8. <a href="http://cn.voidcc.com/question/p-hatohafd-dn.html" target="_blank" title="可以扩展文本框以输入多行文本吗?"> 可以扩展文本框以输入多行文本吗? </a> </li> <li> 9. <a href="http://cn.voidcc.com/question/p-myujurzu-k.html" target="_blank" title="XSLT和XSLFO命名空间"> XSLT和XSLFO命名空间 </a> </li> <li> 10. <a href="http://cn.voidcc.com/question/p-hiqgafpa-p.html" target="_blank" title="用Thin或Passenger代替杂种可以提高可扩展性"> 用Thin或Passenger代替杂种可以提高可扩展性 </a> </li> <li> 11. <a href="http://cn.voidcc.com/question/p-byfslhea-bv.html" target="_blank" title="Indesign可扩展文本框"> Indesign可扩展文本框 </a> </li> <li> 12. <a href="http://cn.voidcc.com/question/p-dlnkfdop-kd.html" target="_blank" title="一个Chrome扩展可以启用或禁用另一个Chrome扩展吗?"> 一个Chrome扩展可以启用或禁用另一个Chrome扩展吗? </a> </li> <li> 13. <a href="http://cn.voidcc.com/question/p-qrmrklvd-bd.html" target="_blank" title="Faye&Ruby或Node.js的可扩展性"> Faye&Ruby或Node.js的可扩展性 </a> </li> <li> 14. <a href="http://cn.voidcc.com/question/p-cmbvbckv-hv.html" target="_blank" title="或扩展脚本中的运算符"> 或扩展脚本中的运算符 </a> </li> <li> 15. <a href="http://cn.voidcc.com/question/p-axyualjd-om.html" target="_blank" title="文本覆盖文本并可扩展。"> 文本覆盖文本并可扩展。 </a> </li> <li> 16. <a href="http://cn.voidcc.com/question/p-rzeqzfay-rw.html" target="_blank" title="无法在Javascript或Jython中使用Ant创建XSLT扩展"> 无法在Javascript或Jython中使用Ant创建XSLT扩展 </a> </li> <li> 17. <a href="http://cn.voidcc.com/question/p-ujntcufi-ch.html" target="_blank" title="XSL转换,而不XSL扩展启用"> XSL转换,而不XSL扩展启用 </a> </li> <li> 18. <a href="http://cn.voidcc.com/question/p-rmoxgvla-dw.html" target="_blank" title="Android扩展文件创建ZIP或JOBB?"> Android扩展文件创建ZIP或JOBB? </a> </li> <li> 19. <a href="http://cn.voidcc.com/question/p-mscdkxla-se.html" target="_blank" title="LibGit2Sharp.NameConflictException“文件名或扩展名太长。”"> LibGit2Sharp.NameConflictException“文件名或扩展名太长。” </a> </li> <li> 20. <a href="http://cn.voidcc.com/question/p-ybiypwyv-sv.html" target="_blank" title="改进RDF扩展:文字或资源?"> 改进RDF扩展:文字或资源? </a> </li> <li> 21. <a href="http://cn.voidcc.com/question/p-paguammp-ds.html" target="_blank" title="一个类是否可以扩展两个或更多类"> 一个类是否可以扩展两个或更多类 </a> </li> <li> 22. <a href="http://cn.voidcc.com/question/p-ynrhedcn-pg.html" target="_blank" title="一个班可以扩展或覆盖自己吗?"> 一个班可以扩展或覆盖自己吗? </a> </li> <li> 23. <a href="http://cn.voidcc.com/question/p-oyqhsuos-rk.html" target="_blank" title="可以使用LINQ to XML或XPath扩展找到后代"> 可以使用LINQ to XML或XPath扩展找到后代 </a> </li> <li> 24. <a href="http://cn.voidcc.com/question/p-ajnlxmoz-ct.html" target="_blank" title="组合或扩展接口?"> 组合或扩展接口? </a> </li> <li> 25. <a href="http://cn.voidcc.com/question/p-atovuzmp-ea.html" target="_blank" title="删除HTML或ASPX扩展"> 删除HTML或ASPX扩展 </a> </li> <li> 26. <a href="http://cn.voidcc.com/question/p-ggsoajom-mg.html" target="_blank" title="扩展方法或继承?"> 扩展方法或继承? </a> </li> <li> 27. <a href="http://cn.voidcc.com/question/p-nedynjcq-kx.html" target="_blank" title="包括或扩展(UML java)"> 包括或扩展(UML java) </a> </li> <li> 28. <a href="http://cn.voidcc.com/question/p-pehacnfz-nr.html" target="_blank" title="Cookie或localStorage与铬扩展"> Cookie或localStorage与铬扩展 </a> </li> <li> 29. <a href="http://cn.voidcc.com/question/p-vpsmzkge-mg.html" target="_blank" title="无法扩展MapActivity或MapView"> 无法扩展MapActivity或MapView </a> </li> <li> 30. <a href="http://cn.voidcc.com/question/p-kflvfbyi-kk.html" target="_blank" title="JPA创建或 - 扩展表"> JPA创建或 - 扩展表 </a> </li> </ul> </div> <div> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-6208739752673518" data-ad-slot="3534119089"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="padding-top-10"></div> </div> </div> <script type="text/javascript" src="http://img2.voidcc.com/voidso/script/side.js?t=1652515421853"></script> <script type="text/javascript" src="http://img2.voidcc.com/voidso/plugin/highlight/highlight.pack.js"></script> <link href="http://img2.voidcc.com/voidso/plugin/highlight/styles/docco.css" media="screen" rel="stylesheet" type="text/css" /> <script type="text/javascript"> $('pre').each(function(i, e) { hljs.highlightBlock(e, "<span class='indent'> </span>", false) }); </script> <div class="col-lg-3 col-md-4 col-sm-5"> <div id="rightTop"> <div class="row sidebar panel panel-default"> <div class="panel-heading font-bold"> 每日一句 </div> <div class="panel-body m-b-sm m-t-sm clearfix"> 每一个你不满意的现在,都有一个你没有努力的曾经。 </div> </div> <div class="row"> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- VOIDCC问答侧边栏广告 --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="3862022848" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="row sidebar panel panel-default"> <div class="panel-heading font-bold"> 最新问题 </div> <div class="m-b-sm m-t-sm clearfix"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://cn.voidcc.com/question/p-clbwiskf-wt.html" target="_blank" title="如何阻止wpf UI以避免非法状态?"> 如何阻止wpf UI以避免非法状态? </a> </li> <li class="side_article_list_item"> 2. <a href="http://cn.voidcc.com/question/p-ddglpvwt-bax.html" target="_blank" title="使用SQL查找协变性"> 使用SQL查找协变性 </a> </li> <li class="side_article_list_item"> 3. <a href="http://cn.voidcc.com/question/p-tkxahyxc-xg.html" target="_blank" title="从复选框选择的表单人口"> 从复选框选择的表单人口 </a> </li> <li class="side_article_list_item"> 4. <a href="http://cn.voidcc.com/question/p-vbqwpzhk-bbd.html" target="_blank" title="为什么我的DropDownListFor默认值无法正常工作?"> 为什么我的DropDownListFor默认值无法正常工作? </a> </li> <li class="side_article_list_item"> 5. <a href="http://cn.voidcc.com/question/p-govqayis-ur.html" target="_blank" title="ABCreateStringWithAddressDictionary弃用"> ABCreateStringWithAddressDictionary弃用 </a> </li> <li class="side_article_list_item"> 6. <a href="http://cn.voidcc.com/question/p-urnhtcdx-uq.html" target="_blank" title="将一个字符串的第一个实例替换为一个变量或其他唯一字符串"> 将一个字符串的第一个实例替换为一个变量或其他唯一字符串 </a> </li> <li class="side_article_list_item"> 7. <a href="http://cn.voidcc.com/question/p-yyjcjdcf-ug.html" target="_blank" title="从psd获取坐标"> 从psd获取坐标 </a> </li> <li class="side_article_list_item"> 8. <a href="http://cn.voidcc.com/question/p-godhwyrp-uh.html" target="_blank" title="在TextView中更改textSize"> 在TextView中更改textSize </a> </li> <li class="side_article_list_item"> 9. <a href="http://cn.voidcc.com/question/p-qbnolpvx-uh.html" target="_blank" title="用于日常报告"> 用于日常报告 </a> </li> <li class="side_article_list_item"> 10. <a href="http://cn.voidcc.com/question/p-hujsssun-bar.html" target="_blank" title="不能下载IE"> 不能下载IE </a> </li> </ul> </div> </div> </div> <p class="article-nav-bar"></p> <div class="row sidebar article-nav"> <div class="row box_white visible-sm visible-md visible-lg margin-zero"> <div class="top"> <h3 class="title"><i class="glyphicon glyphicon-th-list"></i> 相关问题</h3> </div> <div class="article-relative-content"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://cn.voidcc.com/question/p-zrigmfnl-bq.html" target="_blank" title="div不扩展表扩展,或div不扩展当它扩大"> div不扩展表扩展,或div不扩展当它扩大 </a> </li> <li class="side_article_list_item"> 2. <a href="http://cn.voidcc.com/question/p-rzcraptb-md.html" target="_blank" title="我可以修改或扩展ChartJS吗?"> 我可以修改或扩展ChartJS吗? </a> </li> <li class="side_article_list_item"> 3. <a href="http://cn.voidcc.com/question/p-aqmlnzkv-og.html" target="_blank" title="是否可以“扩展”或重新使用Eclipse扩展点?"> 是否可以“扩展”或重新使用Eclipse扩展点? </a> </li> <li class="side_article_list_item"> 4. <a href="http://cn.voidcc.com/question/p-zzedqhtt-gr.html" target="_blank" title="现在或以后扩展?"> 现在或以后扩展? </a> </li> <li class="side_article_list_item"> 5. <a href="http://cn.voidcc.com/question/p-cbapnkmq-nt.html" target="_blank" title="点击它可以展开JTextArea或JTextPane?"> 点击它可以展开JTextArea或JTextPane? </a> </li> <li class="side_article_list_item"> 6. <a href="http://cn.voidcc.com/question/p-opaeqrap-gk.html" target="_blank" title="是否可以在VisualStudio的XSLT编辑器中使用XSLT扩展(sitecore扩展)?"> 是否可以在VisualStudio的XSLT编辑器中使用XSLT扩展(sitecore扩展)? </a> </li> <li class="side_article_list_item"> 7. <a href="http://cn.voidcc.com/question/p-ekoanhtv-pz.html" target="_blank" title="xsl-stylesheet或xslt-styleshhet,一个和相同?"> xsl-stylesheet或xslt-styleshhet,一个和相同? </a> </li> <li class="side_article_list_item"> 8. <a href="http://cn.voidcc.com/question/p-hatohafd-dn.html" target="_blank" title="可以扩展文本框以输入多行文本吗?"> 可以扩展文本框以输入多行文本吗? </a> </li> <li class="side_article_list_item"> 9. <a href="http://cn.voidcc.com/question/p-myujurzu-k.html" target="_blank" title="XSLT和XSLFO命名空间"> XSLT和XSLFO命名空间 </a> </li> <li class="side_article_list_item"> 10. <a href="http://cn.voidcc.com/question/p-hiqgafpa-p.html" target="_blank" title="用Thin或Passenger代替杂种可以提高可扩展性"> 用Thin或Passenger代替杂种可以提高可扩展性 </a> </li> </ul> </div> </div> </div> </div> </div> </div> </div><!-- wrap end--> <!-- footer --> <footer id="footer"> <div class="bg-simple lt"> <div class="container"> <div class="row padder-v m-t"> <div class="col-xs-8"> <ul class="list-inline"> <li><a href="http://cn.voidcc.com/contact">联系我们</a></li> <li>© 2020 CN.VOIDCC.COM</li> <li><a rel="nofollow" href="https://beian.miit.gov.cn/" target="_blank">沪ICP备13005482号-13</a></li> <li><script type="text/javascript" src="https://s9.cnzz.com/z_stat.php?id=1280098168&web_id=1280098168"></script></li> <li><a href="http://cn.voidcc.com/" target="_blank" title="程序问答园区">简体中文</a></li> <li><a href="http://hk.voidcc.com/" target="_blank" title="程序問答園區">繁體中文</a></li> <li><a href="http://ru.voidcc.com/" target="_blank" title="поле вопросов и ответов">Русский</a></li> <li><a href="http://de.voidcc.com/" target="_blank" title="Frage - und - antwort - Park">Deutsch</a></li> <li><a href="http://es.voidcc.com/" target="_blank" title="Preguntas y respuestas">Español</a></li> <li><a href="http://hi.voidcc.com/" target="_blank" title="कार्यक्रम प्रश्न और उत्तर पार्क">हिन्दी</a></li> <li><a href="http://it.voidcc.com/" target="_blank" title="IL Programma di chiedere Park">Italiano</a></li> <li><a href="http://ja.voidcc.com/" target="_blank" title="プログラム問答園区">日本語</a></li> <li><a href="http://ko.voidcc.com/" target="_blank" title="프로그램 문답 단지">한국어</a></li> <li><a href="http://pl.voidcc.com/" target="_blank" title="program o park">Polski</a></li> <li><a href="http://tr.voidcc.com/" target="_blank" title="Program soru ve cevap parkı">Türkçe</a></li> <li><a href="http://vi.voidcc.com/" target="_blank" title="Đáp ứng viên">Tiếng Việt</a></li> <li><a href="http://fr.voidcc.com/" target="_blank" title="Programme interrogation Park">Française</a></li> </ul> </div> </div> </div> </div> </div> </footer> <!-- / footer --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-77509369-5"></script> <script> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('js', new Date()); gtag('config', 'UA-77509369-5'); </script> <script> var _hmt = _hmt || []; (function () { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?67d4731349f0b00136755b80364ce381"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>