xpathを使用した2つの異なるノードの文字列長-2つのノードを合計する文字列長

StackOverflow https://stackoverflow.com/questions/7828091

  •  27-10-2019
  •  | 
  •  

質問

こんにちはみんな次のXpathは機能しないようです。

//FullName[sum(string-length(FirstName) | string-length(LastName))>= 30]

エラー:式はノードセットを評価する必要があります。

XMLスニペット

<FullName>
 <FirstName>somereallylongfirstnameguy</FirstName>
 <LastName>somereallylonglasttnameguyabcdefghijklmnopqrstuv</LastName>
</FullName>

合計関数が数値を追加し、文字列の長さが数値を返すことを知っています。

次の式は正常に機能します。

//FullName[string-length(FirstName) >= 1]

どんな助けも感謝します、ありがとう!

役に立ちましたか?

解決

sum() 関数 ノードセットが期待されます, 、あなたがあなたに提供しようとします string-length() 呼び出しますが、それは失敗します。 sum() ここでは適切な機能ではないようです。

次のように、長さを直接加算することができます。

//FullName[string-length(FirstName)+string-length(LastName) >= 30] 

または、最初に連結を使用してから、長さを取得できます。

//FullName[string-length(concat(FirstName,LastName)) >= 30] 

または、スニペットがすべての人に代表される場合 FullName 要素、次のようなコンテキストノードのすべてのテキストノードの内容の長さを考慮してください。

//FullName[string-length() >= 30] 

他のヒント

名前の数が異なる場合(Middle Initiil、Orefix、Suffixなど)、単一のXPath 1.0式で必要な合計を取得することはできません。

Xpath 2.0では、これが可能です:

//FullName[sum(*/stringlength()) ge 30]
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top