gpt4 book ai didi

xslt - 如何选择从特定节点而不是根节点开始的文本节点的前面节点?

转载 作者:行者123 更新时间:2023-12-03 16:22:30 24 4
gpt4 key购买 nike

如何从我知道其ID的特定节点开始选择文本节点的前面节点,而不是从根节点获取文本节点?

当我从文本节点的模板匹配中调用以下内容时,
我从根获得所有前面的文本节点。我想修改上面的代码,以选择仅在具有特定ID的节点说123之后出现的文本节点。即/// * [@ id ='123']之类的东西

          <xsl:template match="text()[. is $text-to-split]"> 
<xsl:variable name="split-index" as="xsd:integer"
select="$index - sum(preceding::text()/string-length(.))"/>
<xsl:value-of select="substring(., 1, $split-index - 1)"/>
<xsl:copy-of select="$new"/>
<xsl:value-of select="substring(., $split-index)"/>
</xsl:template>

<xsl:variable name="text-to-split" as="text()?"
select="descendant::text()[sum((preceding::text(), .)/string-length(.)) ge $index][1]"/>


如何在我使用previous :: text的位置中包含条件,以便选择相对于我知道的特定节点ID的先前文本节点?

最佳答案

您可以使用以下几种变体:

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

<xsl:variable name="vStart" select="/*/*[@myId='123']/text()"/>
<xsl:variable name="vEnd" select="/*/*[last()]"/>

<xsl:template match="/">
<xsl:value-of select=
"*/*[last()]
/sum(preceding::text()
intersect
$vStart/following::text()
)
"/>
---------------
<xsl:value-of select=
"*/*[last()]
/sum(preceding::text()[. >> $vStart])
"/>
---------------
<xsl:value-of select=
"sum(/*/*[. >> $vStart and . &lt;&lt; $vEnd])
"/>
</xsl:template>
</xsl:stylesheet>


在以下XML文档上应用此转换时:

<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num myId='123'>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>010</num>
</nums>


产生了预期的结果:

30
---------------
30
---------------
30

关于xslt - 如何选择从特定节点而不是根节点开始的文本节点的前面节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2783434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com