【问题标题】:XPath 1.0: Returning a string from multiple node results?XPath 1.0:从多个节点结果返回一个字符串?
【发布时间】:2011-12-10 05:07:33
【问题描述】:

所以说我有一个像这样的节点结构:

<Row>
 <Column Name="Primary Number">1</Column>
 <Column Name="Secondary Number">01</Column>
 <Column Name="Text">This is all one sentence</Column>
<Row>
 <Column Name="Primary Number">1</Column>
 <Column Name="Secondary Number">02</Column>
 <Column Name="Text">I would like to return</Column>
<Row>
 <Column Name="Primary Number">1</Column>
 <Column Name="Secondary Number">03</Column>
 <Column Name="Text">as one string, in one xpath line</Column>

首先我想说这不是我的xml,我也没有帮助构建它。但我不得不用它来检索我需要的信息....所以请帮忙。

所以我想使用一个 XPath 做的是返回一个字符串,该字符串包含来自所有 Primary Number=1 节点的所有 n 个文本字段的文本。
这可能使用 XPath 1.0 吗?

我有一个不太优雅的解决方案,但它只有在我知道辅助数字的确切数量时才有效,然后它只是一堆乱七八糟的 concat() ......

大家好,感谢大家的回复! 所以我想用这个字符串做的是使用 contains() 来搜索特定的关键字,但我发现了一个捷径,实际上有一个连接所有值的字符串,并且只需要分享它以防有人有类似的问题。 Tod 的提示对此有很大帮助,我只是为其添加了条件和 BAM 魔法。 这里是:

Table[@Name='TableName']/Row/Column[@Name='Text' and contains(text(),"keyword")][preceding-sibling::Column[@Name='Primary Number' and text()='15']]

因此,它所做的不是将所有节点值结果连接为一个字符串,然后在其上使用 contains(),而是分别在每一行中搜索单词,从而消除对不可能的需求。 感谢所有帮助家伙,如果没有所有的好评,就无法做到! (我会给每个人投票,但我太新了:()

【问题讨论】:

标签: xml xpath


【解决方案1】:

这是在 XPath 2.0 中由 string-join() 函数完成的。它可以在 XSLT 1.0 中使用&lt;xsl:for-each&gt; 完成。但我不认为它可以在没有宿主语言支持的纯 XPath 1.0 中完成。

【讨论】:

    【解决方案2】:

    这似乎在这里工作:

    //Row/Column[@Name="Text"][preceding-sibling::Column[@Name="Primary Number"]/text()="1"]
    

    返回:

    This is all one sentence
    I would like to return
    as one string, in one xpath line
    

    不过,我不确定您是否发现结果字符串中的新行是可以接受的。

    【讨论】:

    • 托德-感谢您的出色回答,它比我现在拥有的更优雅,我学到了一些东西。但这会返回一个节点列表,而我需要一个字符串,它在 XPath 1.0 中只取第一个节点(“这就是一个句子”)。你能把这三个都作为字符串返回吗?
    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 2015-06-21
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    • 2014-04-26
    相关资源
    最近更新 更多