Разбор HTML-данных в параметрах для XML-ответа с использованием CDATA - PullRequest
0 голосов
/ 03 февраля 2012

В API я генерирую ответ Xml, нажимая на URL с данными запроса в параметрах. Он содержит поле с HTML-содержимым и тегами. Содержимое корректно сохраняется в БД, но когда генерируется ответ, кодируются теги, что произойдет, так как нам нужно пропустить эти поля при разборе. Я хотел бы знать, как я могу реализовать CDATA, чтобы пропустить определенные поля при разборе.

def generate_mobile_api_success_response(status_code, format, request_id, content = nil)
  format_type_method, options_hash, content_type = get_format_method(format)

  data = { "request_id" => request_id, "status" => status_code, "message" => status_message(status_code)}
  data["data"] = content unless content.blank?
  data = generate_data_format(format, data)

  resp = [status_code, { "Content-Type" => content_type , "request_id" => request_id}, data.send(format_type_method, options_hash)]
  generate_active_controller_response_format(resp)
  resp
end

Передаваемый контент является хэшем params, а формат - xml. Когда я попытался распечатать, респ содержит следующие данные. Подробный тег описания содержит закодированные данные

 [201, {"request_id"=>"b425bce0-307d-012f-3e68-042b2b8686e6", "Content-Type"=>"application/xml"}, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<response>\n  <data>\n    <fine_print_line_3>line 3</fine_print_line_3>\n    <available_start_date>2012-02-02T06:00:00+05:30</available_start_date>\n    <status>inactive</status>\n    <highlight_line_2>gfgf</highlight_line_2>\n    <original_price>50.00</original_price>\n    <category_id>bc210bb0-52b7-012e-8896-12313b077c61</category_id>\n    <available_end_date>2012-03-25T00:00:00+05:30</available_end_date>\n    <expiry_date>2012-08-25T00:00:00+05:30</expiry_date>\n    <highlight_line_3></highlight_line_3>\n   <product_service>food</product_service>\n   <created_at>2012-02-03T15:43:56+05:30</created_at>\n   <detailed_description>&lt;b&gt;this is the testing detailed&lt;/b&gt; </detailed_description>...

Я, конечно, хотел бы опубликовать дополнительный код, если это необходимо.

1 Ответ

0 голосов
/ 03 февраля 2012

То есть ваши данные в формате XML, и вы хотите знать содержимое этих полей?

Используйте Нокогири:

xml = data.send(format_type_method, options_hash)
doc = Nokogiri::XML(xml)
start_date = doc.xpath("//available_start_date").content

p start_date #=> "2012-02-02T06:00:00+05:30"

Если у вас есть поля в переменных, вы можете делать все, что захотите.

...