0

ここにXMLがあります.......

<Book id="isbn-0-671-21280-X">
    <Title>How to Read a Book</Title>
    <Subtitle>The Classic Guide to Intelligent Reading</Subtitle>
    <Author>Mortimer J. Adler</Author>
    <Author>Charles Van Doren</Author>
    <Date>1940</Date>
    <Publisher>Simon &amp; Schuster</Publisher>
</Book>

idの属性の長さを取得したいBook

私が書いた:

string-length(//Book/@id)

そしてもう1つ:

//Book/string-length(@id)

どちらも機能していますが、2 番目の方法が完全に正しいかどうかは疑問です。

4

2 に答える 2

1

XPath 2 では、両方の方法が正しい

/もうパスとして考えるのではなく、マップ演算子のように考えるべきです。左のシーケンスの各要素に右の関数を適用します。

次のようなこともできます

//Book/(a-function-that-returns-nodes() | b-function-that-returns-nodes())/../..
于 2013-06-28T09:02:33.780 に答える
1

これら 2 種類の関数呼び出しには違いがあります。string-length(//some/expression)パス式のすべての結果を取得してから文字列の長さを計算し、//some/expression/string-length()その式の一致するすべての結果の文字列の長さを返します。

XML には 1 冊の本しか含まれていないため、両方のバージョンで同じ結果が得られます。複数の本がある場合、最初のクエリはすべての本の合計文字列の長さを返し、2 番目のクエリは各本の識別子の文字列の長さを返します。


他の属性 (またはサブ要素) については、上記と同じことが適用されます//book/@id/string-lenght()//Book/string-length(@id)@id

于 2013-06-28T09:15:56.713 に答える