diff --git a/src/pkg/encoding/xml/read.go b/src/pkg/encoding/xml/read.go
index e97abec55a4490103fd6732a9781282dd2139445..9617150c8f1d1e871b20119b804fbca0fc0a8cd8 100644
--- a/src/pkg/encoding/xml/read.go
+++ b/src/pkg/encoding/xml/read.go
@@ -201,8 +201,8 @@ func (p *Parser) Unmarshal(val interface{}, start *StartElement) error {
 func fieldName(original string) string {
 
 	var i int
-	//remove leading underscores
-	for i = 0; i < len(original) && original[i] == '_'; i++ {
+	//remove leading underscores, without exhausting all characters
+	for i = 0; i < len(original)-1 && original[i] == '_'; i++ {
 	}
 
 	return strings.Map(
diff --git a/src/pkg/encoding/xml/read_test.go b/src/pkg/encoding/xml/read_test.go
index d39c2d52a835cbbeb9adce7a09453a525c0ee0eb..fbb7fd5d2f276e2e75868921cc415ea956a3cb69 100644
--- a/src/pkg/encoding/xml/read_test.go
+++ b/src/pkg/encoding/xml/read_test.go
@@ -245,6 +245,9 @@ const pathTestString = `
             <Value>C</Value>
             <Value>D</Value>
         </Item1>
+        <_>
+            <value>E</value>
+        </_>
     </items>
     <after>2</after>
 </result>
@@ -279,11 +282,17 @@ type PathTestD struct {
 	Before, After string
 }
 
+type PathTestE struct {
+	Underline     string `xml:"items>_>value"`
+	Before, After string
+}
+
 var pathTests = []interface{}{
 	&PathTestA{Items: []PathTestItem{{"A"}, {"D"}}, Before: "1", After: "2"},
 	&PathTestB{Other: []PathTestItem{{"A"}, {"D"}}, Before: "1", After: "2"},
 	&PathTestC{Values1: []string{"A", "C", "D"}, Values2: []string{"B"}, Before: "1", After: "2"},
 	&PathTestD{Other: PathTestSet{Item1: []PathTestItem{{"A"}, {"D"}}}, Before: "1", After: "2"},
+	&PathTestE{Underline: "E", Before: "1", After: "2"},
 }
 
 func TestUnmarshalPaths(t *testing.T) {