草庐IT

html - XSLT 嵌套列表项

coder 2024-06-27 原文

我是 xslt 的新手,我试图处理嵌套无序或有序列表项的情况 例如:

*  Dresses
          # Formal
                -  Men
                -  Women
                - Children
          # Casual
     *  FootWear
     *  Other Accessories

基本上,列表项是相互嵌套的,但我们可以将它们嵌套得尽可能深。你能给我一个关于如何实现这一目标的总体思路吗..

Edith 说:感谢您的快速回复。这是我的 xml:

<?xml version="1.0" encoding="utf-8"?>
<emailmessage>
    <ul>
        <li>Dresses</li>
        <ul>
            <li>Professional</li>
            <ul>
                <li>Mens</li>
                <li>Womens</li>
            </ul>
            <li>Causual </li>
        </ul>
        <li>FootWear</li>
        <li>Other Accessories</li>
    </ul>
</emailmessage>

这是我的 html 类型的 xml,格式是我想以纯文本形式获得的格式,即

  • 一个标签和*如果它是 <li>没有任何祖先
  • 两个标签和#如果它是第一个的子列表,即具有一个祖先的子列表
  • 三个选项卡 -如果它的子列表的子列表即有两个祖先。

格式重复..

* Dresses
    # Formal
        - Men
        - Women
        - Children
    # Casual
* FootWear
* Other Accessories

最佳答案

此转换适用于任何级别的嵌套,最多 20:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:strip-space elements="*"/>

 <xsl:variable name="vIndent"
  select="'&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;'"/>

 <xsl:template match="li">
  <xsl:value-of select=
   "concat(substring($vIndent,1, count(ancestor::ul)+1),.)"/>
 </xsl:template>
</xsl:stylesheet>

应用于提供的 XML 文档时:

<emailmessage>
    <ul>
        <li>* Dresses</li>
        <ul>
            <li># Professional</li>
            <ul>
                <li>- Mens</li>
                <li>- Womens</li>
            </ul>
            <li># Causual </li>
        </ul>
        <li>* FootWear</li>
        <li>* Other Accessories</li>
    </ul>
</emailmessage>

产生想要的、正确的结果:

* Dresses
    # Professional
        - Mens
        - Womens
    # Causual 
* FootWear
* Other Accessories

更新:无限嵌套:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="li">
  <xsl:text>&#10;</xsl:text>
  <xsl:for-each select="ancestor::ul"><xsl:text>&#9;</xsl:text></xsl:for-each>
  <xsl:value-of select="."/>
 </xsl:template>
</xsl:stylesheet>

更新 2:OP 指出 XML 文档中不存在标记字符(*、* 和 -)。这是适用于无限嵌套的解决方案:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:strip-space elements="*"/>

 <xsl:variable name="vDelims" select="'- * # '"/>

 <xsl:template match="li">
  <xsl:text>&#10;</xsl:text>
  <xsl:for-each select="ancestor::ul"><xsl:text>&#9;</xsl:text></xsl:for-each>
  <xsl:value-of select=
   "substring($vDelims,
              2*(1+count(ancestor::ul) mod 3) -1,
              2)"/>
  <xsl:value-of select="."/>
 </xsl:template>
</xsl:stylesheet>

应用于提供的 XML 文档时(如上所述,但删除了项目符号):

<emailmessage>
    <ul>
        <li>Dresses</li>
        <ul>
            <li>Professional</li>
            <ul>
                <li>Mens</li>
                <li>Womens</li>
            </ul>
            <li>Causual </li>
        </ul>
        <li>FootWear</li>
        <li>Other Accessories</li>
    </ul>
</emailmessage>

产生了相同的、想要的和正确的结果:

* Dresses
    # Professional
        - Mens
        - Womens
    # Causual 
* FootWear
* Other Accessories

关于html - XSLT 嵌套列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7222481/

有关html - XSLT 嵌套列表项的更多相关文章

  1. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  2. ruby-on-rails - Rails 编辑表单不显示嵌套项 - 2

    我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib

  3. ruby - 将散列转换为嵌套散列 - 2

    这道题是thisquestion的逆题.给定一个散列,每个键都有一个数组,例如{[:a,:b,:c]=>1,[:a,:b,:d]=>2,[:a,:e]=>3,[:f]=>4,}将其转换为嵌套哈希的最佳方法是什么{:a=>{:b=>{:c=>1,:d=>2},:e=>3,},:f=>4,} 最佳答案 这是一个迭代的解决方案,递归的解决方案留给读者作为练习:defconvert(h={})ret={}h.eachdo|k,v|node=retk[0..-2].each{|x|node[x]||={};node=node[x]}node[

  4. ruby - RVM 使用列表[0] - 2

    是否有类似“RVMuse1”或“RVMuselist[0]”之类的内容而不是键入整个版本号。在任何时候,我们都会看到一个可能包含5个或更多ruby的列表,我们可以轻松地键入一个数字而不是X.X.X。这也有助于rvmgemset。 最佳答案 这在RVM2.0中是可能的=>https://docs.google.com/document/d/1xW9GeEpLOWPcddDg_hOPvK4oeLxJmU3Q5FiCNT7nTAc/edit?usp=sharing-知道链接的任何人都可以发表评论

  5. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  6. ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB? - 2

    所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择

  7. Ruby——嵌套类和子类是一回事吗? - 2

    下面例子中的Nested和Child有什么区别?是否只是同一事物的不同语法?classParentclassNested...endendclassChild 最佳答案 不,它们是不同的。嵌套:Computer之外的“Processor”类只能作为Computer::Processor访问。嵌套为内部类(namespace)提供上下文。对于ruby​​解释器Computer和Computer::Processor只是两个独立的类。classComputerclassProcessor#Tocreateanobjectforthisc

  8. ruby - 模块嵌套代码风格偏好 - 2

    我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的

  9. ruby-on-rails - Ruby url 到 html 链接转换 - 2

    我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.

  10. ruby-on-rails - 使用回形针的嵌套形式 - 2

    我有一个名为posts的模型,它有很多附件。附件模型使用回形针。我制作了一个用于创建附件的独立模型,效果很好,这是此处说明的View(https://github.com/thoughtbot/paperclip):@attachment,:html=>{:multipart=>true}do|form|%>posts中的嵌套表单如下所示:prohibitedthispostfrombeingsaved:@attachment,:html=>{:multipart=>true}do|at_form|%>附件记录已创建,但它是空的。文件未上传。同时,帖子已成功创建...有什么想法吗?

随机推荐