كيف يمكنني الحصول على مجموع جميع المحتويات عند تحليل علامة XML في Ruby؟

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

  •  11-09-2019
  •  | 
  •  

سؤال

لدي بعض XHTML (ولكن حقا أي XML ستفعل) مثل هذا:

<h1>
  Hello<span class='punctuation'>,</span>
  <span class='noun'>World<span class='punctuation'>!</span>
</h1>

كيف أحصل على المحتوى الكامل لل <h1/> كسلسلة في روبي؟ كما هو الحال في:

assert_equal "Hello, World!", h1_node.some_method_that_aggregates_all_content

قم بأي من أطر XML (Nokogiri., LIBXML-Ruby., ، & ج.) هل لديك هذا النوع من الأشياء المدمجة؟ إذا لم يكن الأمر كذلك، فأنا أشعر أنني قد تكون قناة ص الأداة المناسبة لهذا المنصب، لكنني لا أستطيع معرفة ما يبدو عليه.

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

المحلول

مع nokogiri يمكنك فقط طلب text من عقدة. المشكلة التي أراها عند القيام بذلك هي أنه سيتم إرجاع جميع المسافة البيضاء وخطوط البيض الموجودة في هذه العقدة، لذلك قد ترغب في تجريد تلك الطريقة التي من المحتمل أن تفعل ذلك أفضل من ما فعلته لهذا المثال).

هنا عينة:

def test_nokogiri_text
  value = Nokogiri::HTML.parse(<<-HTML_END)
    "<h1>
      Hello<span class='punctuation'>,</span>
      <span class='noun'>World<span class='punctuation'>!</span>
     </h1>"
  HTML_END

  h1_node = value.search("h1").first
  assert_equal("Hello, World!", h1_node.text.split(/\s+/).join(' ').strip)
end

نصائح أخرى

Nokogiri Nokogiri :: XML :: NODE # المحتوى سوف تفعل ذلك:

irb(main):020:0> node
=> <h1>
  Hello<span class="punctuation">,</span>
  <span class="noun">World<span class="punctuation">!</span>
</span>
</h1>
irb(main):021:0> node.content
=> "\n  Hello,\n  World!\n\n"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top