如何在没有任何逗号或方括号的情况下获得 XPath 结果?

How to get the XPath result without any commas or square brackets?

我有这样的代码:

<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 的结果?

可能 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), ' ')

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

在大多数情况下,您可以使用类似的东西:

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

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

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

(注意额外的 space)将起作用。

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

但是,首先请注意,您的 XML 不是 well-formed;它使用未声明的命名空间前缀。这是您的 XML 固定为 well-formed:

<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 (namespace-responsible)

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

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

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

将产生字符串

JAE ADAMS

你要求。