جافا:كيف يمكنني استخراج نص منفصل من المتداخلة <div> في أتش تي أم أل?

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

سؤال

على سبيل المثال:

<div>
    this is first
    <div>
        second
   </div>
</div>

أنا أعمل على معالجة اللغة الطبيعية ولدي لترجمة موقع على شبكة الانترنت (وليس باستخدام جوجل ترجمة) التي لا بد لي من استخراج كل من الجمل "هذا هو الأول" و "الثاني" بشكل منفصل حتى أتمكن من استبدالها مع نص لغة أخرى في الانقسامات منها.إذا كنت استخراج النص لأول مرة وسوف تظهر "هذا هو الثاني الأول" وإذا كنت تستخدم العودية لحفر أعمق، فإنه سيتم استخراج فقط "الثانية"

ساعدني من فضلك!

تحرير

باستخدام طريقة أونتيكست () سيتم إنشاء مشكلة في التعليمات البرمجية هتمل التالية:

<div style="top:+0.2em; font-size:95%;">
    the
    <a href="/wiki/Free_content" title="Free content">
        free
    </a>
    <a href="/wiki/Encyclopedia" title="Encyclopedia">
        encyclopedia
    </a>
    that
    <a href="/wiki/Wikipedia:Introduction" title="Wikipedia:Introduction">              
        anyone can edit
    </a>
    .
</div>

سوف تطبع:

ذلك.

مجانا

الموسوعة

يمكن لأي شخص تحرير

ولكن يجب أن يكون:

ال

ذلك

.

الموسوعة

يمكن لأي شخص تحرير

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

المحلول

إذا كنت استخراج النص لأول مرة وسوف تظهر "هذه هي الثانية الأولى"

استخدام ownText() بدلا من text() وستحصل فقط على عنصر يحتوي مباشرة.

هنا مثال:

final String html = "<div>\n"
        + "    this is first\n"
        + "    <div>\n"
        + "        second\n"
        + "   </div>\n"
        + "</div>";

Document doc = Jsoup.parse(html); // Get your Document from somewhere


Element first = doc.select("div").first(); // Select 1st element - take the first found
String firstText = first.ownText(); // Get own text

Element second = doc.select("div > div").first(); // Same as above, but with 2nd div
String secondText = second.ownText();

System.out.println("1st: " + firstText);
System.out.println("2nd: " + secondText);

نصائح أخرى

يمكنك استخدام محلل XML، في أي لغة تستخدمها.هنا بالنسبة ل Java: http://ww.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/

يبدو أنك تستخدم TextContent في Div's لاستخراج المحتوى، والذي سيحصل عليك محتوى هذا العنصر، وجميع العناصر النزوية. (جافا: ستكون هذه طريقة gettextcontent على العنصر)

بدلا من ذلك فحص الأطفال (Java: طريقة GetChildnodes على العنصر). تحتوي العقد على عقار "NodeType" (Java: GetNodetype) الذي يمكنك إلقاء نظرة عليه للعمل عما إذا كانت العقدة عقدة نصية (Java: node.text_node)، أو عنصر (Java: node.element_node). لذلك أن تأخذك مثال لديك شجرة العقد التي تبدو وكأنها ...

giveacodicetagpre.

الحم الخارجي يحتوي مباشرة على عقدين فقط - أول قطعة من النص، والحميل الداخلي. هذا الحم الداخلي ثم يحتوي على النص "الثاني".

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

على افتراض أنك تستخدم W3C DOM API http://docs.oracle.com/javase /7/docs/api/org/w3c/dom/node.html

giveacodicetagpre.

يجب أن يعمل هذا إذا كنت تستخدم محلل HTML JSOV.

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