باستخدام XPath للوصول إلى التعليقات هيراتشي مسطحة

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

سؤال

لدي مستند XML معين (لا يمكن تغيير الهيكل) وأريد الحصول على التعليقات المكتوبة فوق العقد. يبدو المستند هكذا:

<!--Some comment here-->    
    <attribute name="Title">Book A</attribute>
    <attribute name="Author">
       <value>Joe Doe</value>
       <value>John Miller</value>
    </attribute>
<!--Some comment here-->
    <attribute name="Code">1</attribute>

لذا فإن التعليقات اختيارية ، ولكن إذا كان هناك واحد ، فأنا أريد الحصول على التعليق أعلاه كل سمة. استخدام /*/comment()[n] هل تعطيني التعليق n ، لكن بالنسبة لـ n = 2 ، سأحصل بشكل طبيعي على تعليق السمة الثالثة ، لذلك لا يوجد أي صلة بين السمات والتعليقات أي أفكار؟ شكرًا

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

المحلول

يستخدم:

//comment()[following-sibling::*[1][self::attribute]]

هذا أكثر إحكاما ودقة من الإجابة المحددة حاليًا. ال // يعد الاختصار ضروريًا ، نظرًا لأنه لم يتم تقديم مستند XML بشكل جيد ولم يكن مستوى التعشيش في عقد التعليق غير معروف.

نصائح أخرى

إذا كنت ترغب في تحديد التعليقات التي يتبعها attribute العنصر ، ثم هذا يجب أن يعمل:

/*/comment()[following-sibling::*[position()=1 and name()='attribute']]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top