Beispiel #1
0
func processBody(reader *xmltextreader.XmlTextReaderPtr, tag string, currentPointer string, c chan *Word) {
	currentElementNum := 0
	res := reader.Read()
	eventType := reader.NodeType()
	if currentPointer == "/1" {
		currentElementNum = 1
	}

	for !(xmltextreader.XML_END_ELEMENT == eventType && tag == reader.Name()) && -1 != res {
		name := reader.Name()

		if xmltextreader.XML_START_ELEMENT == eventType {
			currentElementNum += 1

			if paragraph_tag == name || text_author_tag == name || subtitle_tag == name || verse_tag == name {
				getParaToTagEnd(reader, name, currentPointer+"/"+strconv.Itoa(currentElementNum), 1, c)
			} else if body_tag == name {
				hasAttr, err := reader.HasAttributes()
				if nil == err && hasAttr == false {
					processBody(reader, name, currentPointer+"/"+strconv.Itoa(currentElementNum), c)
				}
			} else if section_tag == name {
				hasAttr, err := reader.HasAttributes()
				if nil == err && hasAttr {
					// Skip section with id attr, notes definitions
					getParaToTagEnd(reader, name, "", 1, c)
				} else {
					processBody(reader, name, currentPointer+"/"+strconv.Itoa(currentElementNum), c)
				}
			} else if title_tag == name || epigraph_tag == name {
				processBody(reader, name, currentPointer+"/"+strconv.Itoa(currentElementNum), c)
			}
		}
		res = reader.Read()
		eventType = reader.NodeType()
	}
}