This commit is contained in:
Mike Farah 2022-01-02 13:44:31 +11:00
parent e16167ff26
commit 3c7ccf0bc4
3 changed files with 56 additions and 7 deletions

View File

@ -91,6 +91,10 @@ func (dec *xmlDecoder) createMap(n *xmlNode) (*yaml.Node, error) {
if i == 0 {
labelNode.HeadComment = dec.processComment(n.HeadComment)
}
if i == len(n.Children)-1 {
labelNode.FootComment = dec.processComment(n.FootComment)
}

View File

@ -22,3 +22,48 @@ XML nodes that have attributes then plain content, e.g:
The content of the node will be set as a field in the map with the key "+content". Use the `--xml-content-name` flag to change this.
## Round trip: with comments
A best effort is made, but comment positions and white space are not preserved perfectly.
Given a sample.xml file of:
```xml
<!-- before cat -->
<cat>
<!-- in cat before -->
<x>3<!-- multi
line comment
for x --></x>
<!-- before y -->
<y>
<!-- in y before -->
<d><!-- in d before -->z<!-- in d after --></d>
<!-- in y after -->
</y>
<!-- in_cat_after -->
</cat>
<!-- after cat -->
```
then
```bash
yq e -p=xml '.' sample.xml
```
will output
```yaml
# before cat
cat:
# in cat before
x: "3" # multi
# line comment
# for x
y:
# in y before
# in d before
d: z # in d after
# in y after
# before y in_cat_after
# after cat
```

View File

@ -254,13 +254,13 @@ var xmlScenarios = []xmlScenario{
// expected: expectedXmlWithComments,
// scenarioType: "encode",
// },
// {
// description: "Round trip: with comments",
// subdescription: "A best effort is made, but comment positions and white space are not preserved perfectly.",
// input: inputXmlWithComments,
// expected: expectedRoundtripXmlWithComments,
// scenarioType: "roundtrip",
// },
{
description: "Round trip: with comments",
subdescription: "A best effort is made, but comment positions and white space are not preserved perfectly.",
input: inputXmlWithComments,
expected: expectedRoundtripXmlWithComments,
scenarioType: "roundtrip",
},
}
func testXmlScenario(t *testing.T, s xmlScenario) {