Class: Nokogiri::XML::CDATA

Inherits:
Text show all
Defined in:
lib/nokogiri/xml/cdata.rb,
ext/nokogiri/xml_cdata.c

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Text

#content=

Methods included from PP::CharacterData

#inspect, #pretty_print

Class Method Details

.new(document, content) ⇒ Object

Create a new CDATA element on the document with content

If content cannot be implicitly converted to a string, this method will raise a TypeError exception.



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'ext/nokogiri/xml_cdata.c', line 14

static VALUE
rb_xml_cdata_s_new(int argc, VALUE *argv, VALUE klass)
{
  xmlDocPtr c_document;
  xmlNodePtr c_node;
  VALUE rb_document;
  VALUE rb_content;
  VALUE rb_rest;
  VALUE rb_node;
  xmlChar *c_content = NULL;
  int c_content_len = 0;

  rb_scan_args(argc, argv, "2*", &rb_document, &rb_content, &rb_rest);

  if (!rb_obj_is_kind_of(rb_document, cNokogiriXmlNode)) {
    rb_raise(rb_eTypeError,
             "expected first parameter to be a Nokogiri::XML::Document, received %"PRIsVALUE,
             rb_obj_class(rb_document));
  }

  if (!rb_obj_is_kind_of(rb_document, cNokogiriXmlDocument)) {
    xmlNodePtr deprecated_node_type_arg;
    NOKO_WARN_DEPRECATION("Passing a Node as the first parameter to CDATA.new is deprecated. Please pass a Document instead. This will become an error in Nokogiri v1.17.0."); // TODO: deprecated in v1.15.3, remove in v1.17.0
    Noko_Node_Get_Struct(rb_document, xmlNode, deprecated_node_type_arg);
    c_document = deprecated_node_type_arg->doc;
  } else {
    c_document = noko_xml_document_unwrap(rb_document);
  }

  if (!NIL_P(rb_content)) {
    c_content = (xmlChar *)StringValuePtr(rb_content);
    c_content_len = RSTRING_LENINT(rb_content);
  }

  c_node = xmlNewCDataBlock(c_document, c_content, c_content_len);

  noko_xml_document_pin_node(c_node);

  rb_node = noko_xml_node_wrap(klass, c_node);
  rb_obj_call_init(rb_node, argc, argv);

  if (rb_block_given_p()) { rb_yield(rb_node); }

  return rb_node;
}

Instance Method Details

#nameObject

Get the name of this CDATA node



8
9
10
# File 'lib/nokogiri/xml/cdata.rb', line 8

def name
  "#cdata-section"
end