【问题标题】:How to get the XPath result without any commas or square brackets?如何在没有任何逗号或方括号的情况下获得 XPath 结果?
【发布时间】:2016-01-12 22:13:01
【问题描述】:

我有这样的代码:

<out:a>
<out:Name Type="First" TypeCode="Best">JAE</out:Name>
<out:Name Type="Last" TypeCode="Best">ADAMS</out:Name>
</out:a>

当我将 XPath 表达式设为

(//*[local-name() = 'Name']/text())[1],(//*[local-name() = 'Name']/text())[2], 

我得到的结果是 [JAE,ADAMS]

如何给出 XPath 表达式,以便我可以将结果作为 JAE ADAMS

【问题讨论】:

标签: xml xpath soapui


【解决方案1】:

您的问题不清楚您在哪里使用此 XPath 表达式。

在大多数情况下,您可以使用以下内容:

concat(//*:Name[@Type='First'], " ", //*:Name[@Type='Last'])

在 SoapUI XPath 断言中,连接是自动执行的,所以很简单:

${#Response#//*:Name[@Type='First']} ${#Response#//*:Name[@Type='Last'])}

(注意多余的空间)会起作用。

【讨论】:

  • 使用 concat 函数的答案有效。谢谢你。我在 SOAP UI 中使用 xpath。所以我想使用从数据库中获取名称的数据源。因此,当我将预期结果设为 ${DataSource-Name#Name} 时,我收到错误,因为路径 [concat((//*[local-name() = 'Name']/text() 的 XPathContains 比较失败) )[1], " ", (//*[local-name() = 'Name']/text())[2])],期望 [],实际是 [JAE ADAMS]。我现在如何调整 xpath 表达式?
  • @IrineMathew 我不明白。你试过我上面给出的 XPath 表达式吗?和上面给出的完全一样?
  • 这是我给出的 xpath 表达式: concat((//*[local-name() = 'Name']/text())[1], " ", (// *[本地名称()='名称']/文本())[2])。这是有效的。谢谢。
【解决方案2】:

可能string-join 可以。试试:

string-join( ((//*[local-name() = 'Name']/text())[1],(//*[local-name() = 'Name']/text())[2]), ' ' )

string-join( (//*[local-name() = 'Name']/text())[position() le 2], ' ' )

string-join( subsequence( //*[local-name() = 'Name']/text(), 1, 2), ' ')

【讨论】:

    【解决方案3】:

    逗号和方括号是表示结果是节点集或序列的符号。您显然更喜欢 string.

    然而,首先,请注意您的 XML 格式不正确;它使用未声明的命名空间前缀。这是您的 XML 固定格式:

    <out:a xmlns:out="example.com/out">
      <out:Name Type="First" TypeCode="Best">JAE</out:Name>
      <out:Name Type="Last" TypeCode="Best">ADAMS</out:Name>
    </out:a>
    

    然后,这些 XPath 表达式中的任何一个

    • XPath 1.0

      concat(/*/*[1], ' ', /*/*[2])
      
    • XPath 1.0(负责命名空间)

      concat(//out:Name[1], ' ', //out:Name[2])
      
    • XPath 2.0

      string-join(/*/*, ' ')
      
    • XPath 2.0

      string-join(normalize-space(), ' ')
      

    将产生 字符串

    JAE ADAMS
    

    你要求。

    【讨论】:

      猜你喜欢
      • 2022-11-12
      • 2019-10-06
      • 2012-01-02
      • 1970-01-01
      • 2019-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多