Implement XML data support

Example:

```
{{ with resources.Get "https://example.com/rss.xml" | transform.Unmarshal }}
    {{ range .channel.item }}
        <strong>{{ .title | plainify | htmlUnescape }}</strong><br />
        <p>{{ .description | plainify | htmlUnescape }}</p>
        {{ $link := .link | plainify | htmlUnescape }}
        <a href="{{ $link }}">{{ $link }}</a><br />
        <hr>
    {{ end }}
{{ end }}
```

Closes #4470
This commit is contained in:
Paul van Brouwershaven 2021-12-02 17:30:36 +01:00 committed by GitHub
parent 58adbeef88
commit 0eaaa8fee3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 167 additions and 12 deletions

View file

@ -82,6 +82,25 @@ title: Test Metadata
"title": "Test Metadata"
}
`
xmlExample := `<root>
<resources>
<params>
<byline>picasso</byline>
</params>
<src>**image-4.png</src>
<title>The Fourth Image!</title>
</resources>
<resources>
<name>my-cool-image-:counter</name>
<params>
<byline>bep</byline>
</params>
<src>**.png</src>
<title>TOML: The Image #:counter</title>
</resources>
<title>Test Metadata</title>
</root>
`
variants := []struct {
format string
@ -93,6 +112,7 @@ title: Test Metadata
{"TOML", tomlExample},
{"Toml", tomlExample},
{" TOML ", tomlExample},
{"XML", xmlExample},
}
for _, v1 := range variants {

View file

@ -111,6 +111,9 @@ func TestUnmarshal(t *testing.T) {
{testContentResource{key: "r1", content: `slogan = "Hugo Rocks!"`, mime: media.TOMLType}, nil, func(m map[string]interface{}) {
assertSlogan(m)
}},
{testContentResource{key: "r1", content: `<root><slogan>Hugo Rocks!</slogan></root>"`, mime: media.XMLType}, nil, func(m map[string]interface{}) {
assertSlogan(m)
}},
{testContentResource{key: "r1", content: `1997,Ford,E350,"ac, abs, moon",3000.00
1999,Chevy,"Venture ""Extended Edition""","",4900.00`, mime: media.CSVType}, nil, func(r [][]string) {
c.Assert(len(r), qt.Equals, 2)