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 { if i == 0 {
labelNode.HeadComment = dec.processComment(n.HeadComment) labelNode.HeadComment = dec.processComment(n.HeadComment)
}
if i == len(n.Children)-1 {
labelNode.FootComment = dec.processComment(n.FootComment) 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. 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, // expected: expectedXmlWithComments,
// scenarioType: "encode", // scenarioType: "encode",
// }, // },
// { {
// description: "Round trip: with comments", description: "Round trip: with comments",
// subdescription: "A best effort is made, but comment positions and white space are not preserved perfectly.", subdescription: "A best effort is made, but comment positions and white space are not preserved perfectly.",
// input: inputXmlWithComments, input: inputXmlWithComments,
// expected: expectedRoundtripXmlWithComments, expected: expectedRoundtripXmlWithComments,
// scenarioType: "roundtrip", scenarioType: "roundtrip",
// }, },
} }
func testXmlScenario(t *testing.T, s xmlScenario) { func testXmlScenario(t *testing.T, s xmlScenario) {