相关疑难解决方法(0)

XPath:选择所有以下兄弟姐妹,直到另一个兄弟姐妹

这是我的xml的摘录:

<node/>
<node/>
<node id="1">content</node>
<node/>
<node/>
<node/>
<node id="2">content</node>
<node/>
<node/>
Run Code Online (Sandbox Code Playgroud)

我定位于node[@id='1'].我需要一个Xpath来匹配所有<node/>元素,直到下一个非空节点(这里node[@id='2']).


编辑: @id属性只是为了更清楚地解释我的问题,但不是我原来的XML.我需要一个不使用@id属性的解决方案.


希望空的兄弟姐妹后匹配node[@id='2'],所以我不能用天真following-sibling::node[text()=''].

我怎样才能做到这一点?

xpath

36
推荐指数
3
解决办法
5万
查看次数

XPath/XSLT嵌套谓词:如何获取外部谓词的上下文?

似乎这个问题之前没有在stackoverflow上讨论过,除了使用嵌套的XPath Predicates ...精炼在哪里提供了不涉及嵌套谓词的解决方案.

所以我试着写出我想要得到的过度简化的样本:

输入:

<root>
    <shortOfSupply>
        <food animal="doggie"/>
        <food animal="horse"/>
    </shortOfSupply>
    <animalsDictionary>
        <cage name="A" animal="kittie"/>
        <cage name="B" animal="dog"/>
        <cage name="C" animal="cow"/>
        <cage name="D" animal="zebra"/>
    </animals>
</root>
Run Code Online (Sandbox Code Playgroud)

输出:

<root>
    <hungryAnimals>
        <cage name="B"/>
        <cage name="D"/>
    </hungryAnimals>
</root>
Run Code Online (Sandbox Code Playgroud)

或者,如果没有交叉点,

<root>
    <everythingIsFine/>
</root>
Run Code Online (Sandbox Code Playgroud)

我想使用嵌套谓词来获取它:

<xsl:template match="cage">
    <cage>
        <xsl:attribute name="name">
            <xsl:value-of select="@name"/>
        </xsl:attribute>
    </cage>
</xsl:template>

<xsl:template match="/root/animalsDictionary">
    <xsl:choose>
        <!--                                                             in <food>     in <cage>       -->
        <xsl:when test="cage[/root/shortOfSupply/food[ext:isEqualAnimals(./@animal, ?????/@animal)]]">
            <hungryAnimals>
                <xsl:apply-templates select="cage[/root/shortOfSupply/food[ext:isEqualAnimals(@animal, ?????/@animal)]]"/>
            </hungryAnimals>
        </xsl:when>
        <xsl:otherwise>
            <everythingIsFine/>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

那么我该?????怎么写呢呢?

我知道我可以使用一个更多的模板和变量/参数的广泛使用来重写整个样式表,但它甚至使这个样式表变得更加复杂,更不用说真实问题的真实样式表了. …

xslt xpath nested predicate

13
推荐指数
1
解决办法
7451
查看次数

如何在XPath 1.0中执行set操作

我已经在SO和其他地方看到以下内容应该可以工作(这个例子直接取自O'Reilly的XSLT Cookbook):

(: intersection :)
$set1[count(. | $set2) = count($set2)]

(: difference :)
$set1[count(. | $set2) != count($set2)]
Run Code Online (Sandbox Code Playgroud)

它看起来应该没问题,但是当与实际路径而不是变量一起使用时,这似乎失败了.例如,给出以下文档

<a>
  <new>
    <val>1</val>
    <val>2</val>
  </new>
  <old>
    <val>2</val>
    <val>3</val>
  </old>
</a>
Run Code Online (Sandbox Code Playgroud)

和XPath表达式/a/new/val[count(. | /a/old/val)=count(/a/old/val)]/text()我希望得到节点集,{ 2 }但我得到了{ 1 2 }.我有什么想法我做错了吗?

xpath

12
推荐指数
1
解决办法
4450
查看次数

标签 统计

xpath ×3

nested ×1

predicate ×1

xslt ×1