Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(xml_tag), | intent(in) | :: | self | XML tag. |
||
character(len=*), | intent(in) | :: | name | Searched tag name. |
Tag content.
Return tag content of self (or its nested tags) if named name.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
type(xml_tag), | public | :: | tag | Dummy XML tag. |
pure function create_tag_flat(name, attribute, attributes, attributes_stream, sanitize_attributes_value, content, indent, &
is_content_indented, is_self_closing) result(tag)
!---------------------------------------------------------------------------------------------------------------------------------
!< Return an instance of xml tag.
!<
!< Attributes are passed by array.
!---------------------------------------------------------------------------------------------------------------------------------
character(*), intent(in) :: name !< Tag name.
character(*), intent(in), optional :: attribute(1:) !< Attribute name/value pair [1:2].
character(*), intent(in), optional :: attributes(1:,1:) !< Attributes list of name/value pairs [1:2,1:].
character(*), intent(in), optional :: attributes_stream !< Attributes list of name/value pairs as single stream.
logical, intent(in), optional :: sanitize_attributes_value !< Sanitize attributes value.
character(*), intent(in), optional :: content !< Tag value.
integer(I4P), intent(in), optional :: indent !< Number of indent-white-spaces.
logical, intent(in), optional :: is_content_indented !< Activate content indentation.
logical, intent(in), optional :: is_self_closing !< The tag is self closing.
type(xml_tag) :: tag !< XML tag.
!---------------------------------------------------------------------------------------------------------------------------------
!---------------------------------------------------------------------------------------------------------------------------------
call tag%set(name=name, attribute=attribute, attributes=attributes, attributes_stream=attributes_stream, &
sanitize_attributes_value=sanitize_attributes_value, content=content, &
indent=indent, is_content_indented=is_content_indented, is_self_closing=is_self_closing)
!---------------------------------------------------------------------------------------------------------------------------------
endfunction create_tag_flat
pure function create_tag_nested(name, content, attribute, attributes, attributes_stream, sanitize_attributes_value, indent, &
is_content_indented) result(tag)
!---------------------------------------------------------------------------------------------------------------------------------
!< Return an instance of xml tag with value being a nested tag.
!<
!< Attributes are passed by array.
!---------------------------------------------------------------------------------------------------------------------------------
character(*), intent(in) :: name !< Tag name.
type(xml_tag), intent(in) :: content !< Tag value as nested tag..
character(*), intent(in), optional :: attribute(1:) !< Attribute name/value pair [1:2].
character(*), intent(in), optional :: attributes(1:,1:) !< Attributes list of name/value pairs [1:2,1:].
character(*), intent(in), optional :: attributes_stream !< Attributes list of name/value pairs as single stream.
logical, intent(in), optional :: sanitize_attributes_value !< Sanitize attributes value.
integer(I4P), intent(in), optional :: indent !< Number of indent-white-spaces.
logical, intent(in), optional :: is_content_indented !< Activate value indentation.
type(xml_tag) :: tag !< XML tag.
!---------------------------------------------------------------------------------------------------------------------------------
!---------------------------------------------------------------------------------------------------------------------------------
call tag%set(name=name, attribute=attribute, attributes=attributes, content=content%stringify(), &
sanitize_attributes_value=sanitize_attributes_value, attributes_stream=attributes_stream, indent=indent, &
is_content_indented=is_content_indented)
!---------------------------------------------------------------------------------------------------------------------------------
endfunction create_tag_nested
! public methods
pure function attributes(self) result(att_)
!---------------------------------------------------------------------------------------------------------------------------------
!< Return attributes name/value pairs as string.
!---------------------------------------------------------------------------------------------------------------------------------
class(xml_tag), intent(in) :: self !< XML tag.
character(len=:), allocatable :: att_ !< The attributes string.
integer(I4P) :: a !< Counter.
!---------------------------------------------------------------------------------------------------------------------------------
!---------------------------------------------------------------------------------------------------------------------------------
if (self%attributes_number>0) then
att_ = ''
do a=1, self%attributes_number
att_ = att_//' '//self%attribute(1, a)//'="'//self%attribute(2, a)//'"'
enddo
att_ = trim(adjustl(att_))
endif
!---------------------------------------------------------------------------------------------------------------------------------
endfunction attributes
pure function content(self, name)
!---------------------------------------------------------------------------------------------------------------------------------
!< Return tag content of self (or its nested tags) if named *name*.
!<
!< @note If there is no value, the *content* string is returned deallocated.
!---------------------------------------------------------------------------------------------------------------------------------
class(xml_tag), intent(in) :: self !< XML tag.
character(*), intent(in) :: name !< Searched tag name.
character(len=:), allocatable :: content !< Tag content.
type(xml_tag) :: tag !< Dummy XML tag.
!---------------------------------------------------------------------------------------------------------------------------------
!---------------------------------------------------------------------------------------------------------------------------------
if (self%tag_name%is_allocated()) then
if (self%tag_name==name) then
if (self%tag_content%is_allocated()) content = self%tag_content%chars()
else
if (self%tag_content%is_allocated()) then
call tag%search(tag_name=name, source=self%tag_content%chars())
if (tag%tag_content%is_allocated()) content = tag%tag_content%chars()
endif
endif
endif
!---------------------------------------------------------------------------------------------------------------------------------
endfunction content