استعلام XPath على مجموعة العقدة تعمل مثل SQL حيث في

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

سؤال

عينة من وثيقة XML:

  <xml>
    <list>
      <item refid="1" />
      <item refid="3" />
    </list>
    <catalogue>
      <model id="1"><details /></model>
      <model id="2"><details /></model>
      <model id="3"><details /></model>
    </catalogue>
  </xml>

أرغب في الاستعلام عن شيء مثل // Model [id = (// item/ @refid)] للحصول على كل "نموذج" له معرف مرجع في "قائمة"

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

المحلول

أرغب في الاستعلام عن شيء مثل // Model [id = (// item/ @refid)] للحصول على كل "نموذج" له معرف مرجع في "قائمة"

المشكلة الرئيسية هنا هي افتقارك إلى الثقة وليس في الواقع تشغيل محرك XPath لتقييم التعبيرات التي توصلت إليها.

إذا قمت بتقييم تعبير XPath الذي اقترحته:

//model[ @id = (//item/@refid) ]

سترى أنه يختار بالضبط (اثنان) model عناصر ، من id تتم الإشارة إلى السمات من قبل refid سمات item العناصر التي هي أطفال list.

@Jörn-Horstmann في إجابته أوضح بالفعل سبب حصولك على هذه النتائج.

ملاحظة بسيطة تتمثل في تجنب استخدام // اختصار. يتسبب في مسح المستند بأكمله وغير فعال للغاية. في هذه الحالة ، أود استخدام المكافئ ولكن ربما أسرع لتقييم تعبير XPath:

/*/catalogue/model[@id = /*/list/item/@refid]

نصائح أخرى

يجب أن يعيد تعبير XPath الخاص بك بالفعل ما تريده بالضبط. نقلا عن http://www.w3.org/tr/xpath/#booleans, ، الفقرة الخامسة:

إذا كان أحد الكائنات التي يجب مقارنتها عبارة عن مجموعة عقدة والآخر عبارة من العقدة والسلسلة الأخرى صحيحة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top