草庐IT

xml - 概念 XML XSLT preceding-sibling and ancestor

coder 2024-06-23 原文

我是 xslt 的新手,发现它可以很简单也可以很复杂。 我想澄清一些概念。 什么是preceding-sibling,什么是ancestor,google了一下,找到了ancestor的解释。他们网站上的图表更容易理解。

可是我还是不明白preceding-sibling

<product>
    <inventory>
        <drink>
            <lemonade>
                <price>$2.50</price>
                <amount>20</amount>
            </lemonade>
            <pop>
                <price>$1.50</price>
                <amount>10</amount>
            </pop>
        </drink>
          <service>
           <address />
            <phone />
            <delivery> City </delivery>
          </service>      
        <snack>
            <chips>
                <price>$4.50</price>
                <amount>60</amount>
            </chips>
        </snack>
        <hotfood></hotfood>
         <totalprice> $15</totleprice>

    </inventory>
</product>

那么我该如何阅读这个preceding-sibling::pop/ancestor::inventory/totalprice

祖先::库存/总价 = 产品\库存\总价 preceding-sibling::pop - 我不明白这个 那怎么一起读呢?

非常感谢

最佳答案

preceding-sibling::axis

preceding-sibling:: 轴是一个导航轴,包括焦点元素之前的所有同级元素。 “兄弟”是指与引用项具有相同父元素的不同元素。 “在先”是指出现在引用节点之前的节点。 preceding-sibling 轴的顺序是相反的文档顺序。看看这个文档:

<fruit>
  <banana>
   <lady-finger-banana/>
  </banana> 
  <apple/>
  <pear/>
  <kiwi/>
</fruit>

如果焦点节点是 pear,那么序列 preceding-sibling::* 是 ...

  1. 苹果
  2. 香蕉

注:fruit, pear, lady-finger-banana 和 kiwi 没有顺序。

所以以下是正确的:

  • preceding-sibling::*[ 1] 是苹果
  • preceding-sibling::*[ 2] 是香蕉
  • count(preceding-sibling::*) 为 2
  • preceding-sibling::apple[ 1] 也是苹果
  • preceding-sibling::banana[ 1] 是香蕉
  • preceding-sibling::*[ 3] 不存在或为空序列

preceding-sibling::pop/ancestor::inventory/totalprice 示例

我们必须稍微修改您的示例文档才能有效地研究这个示例

<product>
    <inventory>
        <drink>
            <lemonade>
                <price>$2.50</price>
                <amount>20</amount>
            </lemonade>
            <pop>
                <price>$1.50</price>
                <amount>10</amount>
            </pop>
            <focus-item />
         </drink>
        <totalprice>$15</totalprice>  
    </inventory>
</product>

假设焦点在元素 focus-item 上。 要计算表达式 preceding-sibling::pop/ancestor::inventory/totalprice,请按照以下步骤操作:

  1. preceding-sibling::pop 选择所有前面的 pop 元素到 focus-item。这将评估为一个节点的序列。
  2. 对于左侧序列中的每个项目(碰巧只有一个 pop 元素),将此项目设置为临时焦点项目,并评估/右侧的表达式运算符是...

    ancestor::inventory
    

    这样的节点只有一个,就是祖传库存节点。因此,第一个/运算符计算出一个 list 节点的序列。

  3. 现在我们评估第二个/及其右侧操作数表达式 total price 的效果。对于左侧序列中的每个项目(只有一个库存节点,所以它发生了),将其设置为临时焦点项目并计算 totalprice

  4. totalpricechild::totalprice 的缩写。临时焦点节点的子轴上只有一个总价元素,所以最终结果是一个节点的序列,即总价节点。

通过图表理解

这是preceding-sibling:: 的图表。其中,引用节点是 Charlie,preceding-sibling:: 轴上的节点为绿色。它是唯一这样的节点。

关于xml - 概念 XML XSLT preceding-sibling and ancestor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12347412/

有关xml - 概念 XML XSLT preceding-sibling and ancestor的更多相关文章

  1. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  2. ruby-on-rails - 缺失区域;使用 :region option or export region name to ENV ['AWS_REGION' ] - 2

    我知道还有其他相同的问题,但他们没有解决我的问题。我不断收到错误:Aws::Errors::MissingRegionErrorinBooksController#create,缺少区域;使用:region选项或将区域名称导出到ENV['AWS_REGION']。但是,这是我的配置开发.rb:config.paperclip_defaults={storage::s3,s3_host_name:"s3-us-west-2.amazonaws.com",s3_credentials:{bucket:ENV['AWS_BUCKET'],access_key_id:ENV['AWS_ACCE

  3. ruby-on-rails - ActiveRecord 的 find_or_create* 方法是否存在根本性缺陷? - 2

    有几种方法:first_or_create_by、find_or_create_by等,它们的工作原理是:与数据库对话以尝试找到我们想要的东西如果我们找不到,就自己做保存到数据库显然,并发调用这些方法可能会使两个线程都找不到它们想要的东西,并且在第3步中一个线程会意外失败。似乎更好的解决方案是,创建或查找即:提前在您的数据库中创建合理的唯一性约束。如果你想保存一些东西,就保存它如果有效,那就太好了。如果它因为RecordNotUnique异常而无法工作,它已经存在,太好了,加载它那么在什么情况下我想使用Rails内置的东西而不是我自己的(看起来更可靠)create_or_find?

  4. ruby-on-rails - Rails 3 - 过滤器链暂停为 :authentication rendered or redirected - 2

    我仍然收到标题中的“错误”消息,但不知道如何解决。在ApplicationController中,classApplicationController在routes.rb#match'set_activity_account/:id/:value'=>'users#account_activity',:as=>:set_activity_account--thisdoesn'tworkaswell..resources:usersdomemberdoget:action_a,:action_bendcollectiondoget'account_activity'endend和User

  5. ruby-on-rails - Rails FasterCSV "unquoted fields do not allow\r or\n" - 2

    我在使用FasterCSV和我的rakedb:seeds迁移时遇到问题。我收到错误:“rake中止!未加引号的字段不允许\r或\n(第2行)”在以下seeds.rb数据上:require'csv'directory="db/init_data/"file_name="gardenzing020812.csv"path_to_file=directory+file_nameputs'LoadingPlantrecords'#Pre-loadallPlantrecordsn=0CSV.foreach(path_to_file)do|row|Plant.create!:name=>row[1

  6. ruby - OR 运算符和 Ruby where 子句 - 2

    可能真的很简单,但我很难在网上找到关于这个的文档我在Ruby中有两个activerecord查询,我想通过OR运算符连接在一起@pro=Project.where(:manager_user_id=>current_user.id)@proa=Project.where(:account_manager=>current_user.id)我是ruby​​的新手,但我自己尝试使用||@pro=Project.where(:manager_user_id=>current_user.id||:account_manager=>current_user.id)这没有用,所以1.我想知道如何在

  7. ruby - 优雅的链式 'or' 用于测试 Ruby 中的相同变量 - 2

    怎样说才是明智的呢?if@thing=="01"or"02"or"03"or"04"or"05"(数字包含在数据类型字符串的列中。) 最佳答案 制作数组并使用.include?if["01","02","03","04","05"].include?(@thing)如果值真的都是连续的,你可以使用像(1..5).include?这样的范围对于字符串,你可以使用:if("01".."05").include?(@thing) 关于ruby-优雅的链式'or'用于测试Ruby中的相同变量,我

  8. ruby-on-rails - 如何在 Rails 3 中禁用 XML 解析 - 2

    我想禁用HTTP参数的自动XML解析。但我发现命令仅适用于Rails2.x,它们都不适用于3.0:config.action_controller.param_parsers.deleteMime::XML(application.rb)ActionController::Base.param_parsers.deleteMime::XMLRails3.0中的等价物是什么? 最佳答案 根据CVE-2013-0156的最新安全公告你可以将它用于Rails3.0。3.1和3.2ActionDispatch::ParamsParser::

  9. ruby - 如何使用 Nokogiri::XML::Builder 生成动态标签? - 2

    我正在遍历数组中的一组标签名称,我想使用构建器打印每个标签名称,而不是求助于“我认为:builder=Nokogiri::XML::Builder.newdo|xml|fortagintagsxml.tag!tag,somevalendend会这样做,但它只是创建名称为“tag”的标签,并将标签变量作为元素的文本值。有人可以帮忙吗?这个看起来应该比较简单,我刚刚在搜索引擎上找不到答案。我可能没有以正确的方式提问。 最佳答案 尝试以下操作。如果我没记错的话,我添加了一个根节点,因为Nokogiri需要一个。builder=Nokogi

  10. ruby-on-rails - RSpec 应用程序助手测试 : Undefined local variable or method `helper` - 2

    有一段时间这似乎是一个闪烁的错误,但现在它一直出现:当我在一个相当简单的ApplicationHelper规范上运行RSpec时,我得到以下错误:%rspec--backtrace1)ApplicationHelperrendersMarkdownfromplaintextFailure/Error:expect(helper.md(plaintext)).toeq("Header\n")NameError:undefinedlocalvariableormethod`helper'for##/Users/danielsh/.rvm/gems/ruby-2.1.1@project-st

随机推荐