XSLT,如何找到前一个兄弟的(包含文本)最后一个带有文本的子元素?

 只爱裙装 发布于 2023-02-07 11:33

在下面的XML和XSLT中,在xml中元素'i'是当前位置,在那里我需要找到前一个兄弟的最后一个子文本.

Input1.xml

  
    
    
        Text1
        Text2
        Text3
            Text11
                Text12
                    

Text13

Text4 Text5 Text7 Text8 Text6

Child.xsl

  
    
        
            
        
    

    
        
            
        
    

    
        
        
            
                
            
        

        
            
                
            
        

            -The last preceding child text is -
    
  

所需的输出是

Text6最后一个子文本是 - Text8

keshlam.. 7

看起来你的意思是前兄弟姐妹的最后一个后代非空白,而不是最后一个儿童文本.(请记住,您在XML文件中向我们展示的压痕也是文本节点.)

获取前面的兄弟元素.获取其文本节点后代.从那些选择非空白的那些.从那些,选择最后一个.

应该是这样的:

select="preceding-sibling::*/descendant::text()[normalize-space()!=''][last()]"

(我正在利用先前兄弟的主要节点类型是元素的事实).

找到文本节点.要获取其包含元素,请在路径中再添加一个步骤:

select="preceding-sibling::*/descendant::text()[normalize-space()!=''][last()]/parent::*"

(再次,利用父节点的主节点类型是元素的事实).

如果您打算使用XPath和XSLT,那么值得花一些时间来熟悉谓词.它们允许将复杂约束分层到单个路径中,并且它们为语言增加了很多功能.

1 个回答
  • 看起来你的意思是前兄弟姐妹的最后一个后代非空白,而不是最后一个儿童文本.(请记住,您在XML文件中向我们展示的压痕也是文本节点.)

    获取前面的兄弟元素.获取其文本节点后代.从那些选择非空白的那些.从那些,选择最后一个.

    应该是这样的:

    select="preceding-sibling::*/descendant::text()[normalize-space()!=''][last()]"
    

    (我正在利用先前兄弟的主要节点类型是元素的事实).

    找到文本节点.要获取其包含元素,请在路径中再添加一个步骤:

    select="preceding-sibling::*/descendant::text()[normalize-space()!=''][last()]/parent::*"
    

    (再次,利用父节点的主节点类型是元素的事实).

    如果您打算使用XPath和XSLT,那么值得花一些时间来熟悉谓词.它们允许将复杂约束分层到单个路径中,并且它们为语言增加了很多功能.

    2023-02-07 11:35 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有