سؤال

أنا أعمل حاليًا على استخراج البيانات من HTML. أود استخراج النص بين اثنين <p class="xfHeading"> العلامات.

         <p class="xfHeading"><b>XYZ:</b></p> 
            <p>asdfghjk</p>  
            <p>sdsdsd</p>  
            <p>asdvcvcfghjk</p>  

         <p class="xfHeading"><b>ABC:</b></p> 
            <P>fvgbhnjm</P>  

         <p class="xfHeading"><b>PQR:</b></p> 
            <ul> 

            </ul> 

         <p class="xfHeading"><b>MNO:</b></p> 
             <ul> 
                <li>jdjshdj</li>  
             </ul> 

ال انتاج يجب ان يكون :

ASDFGHJK

SDSDSD

ASDVCVCFGHJK

طريقة واحدة للقيام بذلك هي:

/p[class="xfHeading"]/following-sibling::p[0]|/p[class="xfHeading"]/following-sibling::p[1]|/p[class="xfHeading"]/following-sibling::p[2]

أو

/p[class="xfHeading"]/following-sibling::p[position()<4]

ومع ذلك ، نظرًا لأن المحتوى الذي يستمر في التغيير طوال الوقت ، فأنا بحاجة إلى حل يكون فيه المحتوى بين العلامات <p class="xfHeading"> يتم استخلاصه.

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

المحلول

يستخدم:

(//p[@class="xfHeading"])[1]
          /following-sibling::p
             [. << (//p[@class="xfHeading"])[2]]
                 /text()

هذا يعنى: حدد أطفال النصين من الجميع p العناصر التي تتبع الأشقاء من الأول p عنصر في المستند مع class السمة وجود قيمة xfHeading, ، وفي الوقت نفسه يسبق الثانية p عنصر في المستند مع class السمة وجود قيمة xfHeading.

نصائح أخرى

تعديل: بعد التوضيح الخاص بك ، اقتراحي هو استخدام أ flwor التعبير مثل ما يلي. هذا يبحث عن <p> مع الصحيح <b> محتويات العلامة بناءً على المحتويات الفريدة لذلك <b> علامة ، وإرجاع نص كل <p> العلامة التي هي أخا منه.

for $b in //p[class="xfHeading"]/b and $p in //p[class="xfHeading"]/p
    where $b/text() = "XYZ:"
        return p/text()

نلاحظ أن // هو بنية XPath ، وليس تعليق

إجابة قديمة: بدون مثال على ما تريد أن تبدو عليه البيانات الناتجة ، فإن الإجابة على السؤال صعب بعض الشيء. ومع ذلك ، لتحديد ، على سبيل المثال ، النص داخل أ <b> العلامة ، ستفعل:

/p[class = "xfHeading"]/b/text()

بشكل عام ، إلحاق text() إلى نهاية التعبير إرجاع النص داخل العقدة المعنية.

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