كيف يمكنني الحصول على مجموع جميع المحتويات عند تحليل علامة XML في Ruby؟
-
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"
لا تنتمي إلى StackOverflow