...

Source file src/github.com/aws/smithy-go/encoding/xml/element.go

Documentation: github.com/aws/smithy-go/encoding/xml

     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  

View as plain text