سؤال

لدي بعض XML واستعلام XPath. أنا أستخدم ياهو! الحاجيات ، لذلك أنا أستخدم XPath 1.0.

ها هي جوهر XML الخاص بي ...

<root>
    <cat num="SOURCE">
        <movie>
            <swf>speak.swf</swf> 
            <width>250</width> 
            <height>150</height> 
            <colour>cccccc</colour> 
        </movie>
        <movie>
            <swf>inertia.swf</swf> 
            <width>380</width> 
            <height>130</height> 
            <colour>9a9a9a</colour> 
        </movie>
        <movie>
            <swf>swing.swf</swf> 
            <width>380</width> 
            <height>130</height> 
            <colour>9A9A9A</colour> 
        </movie>
        ....

الآن ... إذا قمت بتشغيل هذا الاستعلام:

"root/cat/movie/swf"

أحصل على 42 نتيجة ، جميع العقد "SWF" وهي صحيحة.

ومع ذلك ، إذا كنت أريد فقط السادس ، أود أن أكون قادرًا على القيام بذلك:

"root/cat/movie/swf[6]"

لكنني أحصل على قائمة تحتوي على 0 عقد.

بغرابة ، باستخدام [1] (وليس هناك قيمة أخرى) ينتج عن قائمة جميع العقد الـ 42.

من الواضح أنني أفتقد شيئًا أساسيًا تمامًا هنا. أي شخص يرى ما هو؟

هل كانت مفيدة؟

المحلول

أتساءل إذا كنت تقصد:

"root/cat/movie[6]/swf"

(يحصل على SWF من الفيلم السادس)

أو بدلا من ذلك:

"(root/cat/movie/swf)[6]"

(يجد جميع عناصر الفيلم/SWF ، ويختار السادس)

عندما يكون لكل فيلم SWF واحد بالضبط ، فإن الاثنين متماثلان ؛ إذا كان لفيلم صفر أو عناصر SWF متعددة ، فإن استفسارين يختلفان بمهارة ...

نصائح أخرى

"root/cat/movie/swf[6]"

يشير إلى كل 6 <swf> عقدة في "root/cat/movie" سياق الكلام.

لديك واحد فقط <swf> عقدة كل.

ما تعنيه هو:

"root/cat/movie[6]/swf"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top