كيفية تحديد العنصر التاسع في XPath 1.0؟
-
19-08-2019 - |
سؤال
لدي بعض 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"