如何在没有任何逗号或方括号的情况下获得 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
你要求。
我有这样的代码:
<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
你要求。