Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(xml_tag), | intent(inout) | :: | self | |||
character(len=*), | intent(in) | :: | source | |||
integer(kind=I4P), | intent(out), | optional | :: | tstart | ||
integer(kind=I4P), | intent(out), | optional | :: | tend |
elemental subroutine parse(self, source, tstart, tend) !< Parse the tag contained into a source string. !< !< It is assumed that the first tag contained into the source string is parsed, the others eventually present are omitted. !< Valid syntax are: !< + `<tag_name att1="att1 val" att2="att2 val"...>...</tag_name>` !< + `<tag_name att1="att1 val" att2="att2 val".../>` !< @note Inside the attributes value the symbols `<` and `>` are not allowed. class(xml_tag), intent(inout) :: self !< XML tag. character(*), intent(in) :: source !< String containing the input. integer(I4P), optional, intent(out) :: tstart !< Starting index of tag inside the string. integer(I4P), optional, intent(out) :: tend !< Ending index of tag inside the string. integer(I4P) :: tstartd !< Starting index of tag inside the string. integer(I4P) :: tendd !< Ending index of tag inside the string. tstartd = 0 tendd = 0 call self%parse_tag_name(source=source, tstart=tstartd, tend=tendd) if (self%tag_name%is_allocated()) then if (index(string=source(tstartd:tendd), substring='=')>0) call self%parse_attributes_names(source=source(tstartd:tendd)) if (index(string=source, substring='</'//self%tag_name//'>')>0) & tendd = index(string=source, substring='</'//self%tag_name//'>') + len('</'//self%tag_name//'>') - 1 call self%get(source=source(tstartd:tendd)) endif if (present(tstart)) tstart = tstartd if (present(tend )) tend = tendd endsubroutine parse