element.go raw

   1  // Copyright 2009 The Go Authors. All rights reserved.
   2  // Use of this source code is governed by a BSD-style
   3  // license that can be found in the LICENSE file.
   4  
   5  // Copied and modified from Go 1.14 stdlib's encoding/xml
   6  
   7  package xml
   8  
   9  // A Name represents an XML name (Local) annotated
  10  // with a name space identifier (Space).
  11  // In tokens returned by Decoder.Token, the Space identifier
  12  // is given as a canonical URL, not the short prefix used
  13  // in the document being parsed.
  14  type Name struct {
  15  	Space, Local string
  16  }
  17  
  18  // An Attr represents an attribute in an XML element (Name=Value).
  19  type Attr struct {
  20  	Name  Name
  21  	Value string
  22  }
  23  
  24  /*
  25  NewAttribute returns a pointer to an attribute.
  26  It takes in a local name aka attribute name, and value
  27  representing the attribute value.
  28  */
  29  func NewAttribute(local, value string) Attr {
  30  	return Attr{
  31  		Name: Name{
  32  			Local: local,
  33  		},
  34  		Value: value,
  35  	}
  36  }
  37  
  38  /*
  39  NewNamespaceAttribute returns a pointer to an attribute.
  40  It takes in a local name aka attribute name, and value
  41  representing the attribute value.
  42  
  43  NewNamespaceAttribute appends `xmlns:` in front of namespace
  44  prefix.
  45  
  46  For creating a name space attribute representing
  47  `xmlns:prefix="http://example.com`, the breakdown would be:
  48  local = "prefix"
  49  value = "http://example.com"
  50  */
  51  func NewNamespaceAttribute(local, value string) Attr {
  52  	attr := NewAttribute(local, value)
  53  
  54  	// default name space identifier
  55  	attr.Name.Space = "xmlns"
  56  	return attr
  57  }
  58  
  59  // A StartElement represents an XML start element.
  60  type StartElement struct {
  61  	Name Name
  62  	Attr []Attr
  63  }
  64  
  65  // Copy creates a new copy of StartElement.
  66  func (e StartElement) Copy() StartElement {
  67  	attrs := make([]Attr, len(e.Attr))
  68  	copy(attrs, e.Attr)
  69  	e.Attr = attrs
  70  	return e
  71  }
  72  
  73  // End returns the corresponding XML end element.
  74  func (e StartElement) End() EndElement {
  75  	return EndElement{e.Name}
  76  }
  77  
  78  // returns true if start element local name is empty
  79  func (e StartElement) isZero() bool {
  80  	return len(e.Name.Local) == 0
  81  }
  82  
  83  // An EndElement represents an XML end element.
  84  type EndElement struct {
  85  	Name Name
  86  }
  87  
  88  // returns true if end element local name is empty
  89  func (e EndElement) isZero() bool {
  90  	return len(e.Name.Local) == 0
  91  }
  92