mirror of
https://github.com/mikefarah/yq.git
synced 2025-01-12 19:25:37 +00:00
it works!
This commit is contained in:
parent
deee3c1f60
commit
46a419aad6
@ -142,16 +142,17 @@ EOM
|
|||||||
assertEquals "$expected" "$X"
|
assertEquals "$expected" "$X"
|
||||||
}
|
}
|
||||||
|
|
||||||
testOutputXmlMultiPropertiesMultietc() {
|
testOutputXmComplex() {
|
||||||
cat >test.yml <<EOL
|
cat >test.yml <<EOL
|
||||||
a: {b: {c: ["cat"]}}asd
|
a: {b: {c: ["cat", "dog"], +f: meow}}
|
||||||
EOL
|
EOL
|
||||||
|
|
||||||
read -r -d '' expected << EOM
|
read -r -d '' expected << EOM
|
||||||
<a>
|
<a>
|
||||||
<b>
|
<b f="meow">
|
||||||
<c>cat</c>
|
<c>cat</c>
|
||||||
</b>asd
|
<c>dog</c>
|
||||||
|
</b>
|
||||||
</a>
|
</a>
|
||||||
EOM
|
EOM
|
||||||
|
|
||||||
|
@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
Encode and decode to and from XML. Whitespace is not conserved for round trips - but the order of the fields are.
|
Encode and decode to and from XML. Whitespace is not conserved for round trips - but the order of the fields are.
|
||||||
|
|
||||||
As yaml does not have the concept of attributes, xml attributes are converted to regular fields with a prefix to prevent clobbering. This defaults to "+", use the `--xml-attribute-prefix` to change.
|
|
||||||
|
|
||||||
Consecutive xml nodes with the same name are assumed to be arrays.
|
Consecutive xml nodes with the same name are assumed to be arrays.
|
||||||
|
|
||||||
All values in XML are assumed to be strings - but you can use `from_yaml` to parse them into their correct types:
|
All values in XML are assumed to be strings - but you can use `from_yaml` to parse them into their correct types:
|
||||||
@ -14,8 +12,6 @@ yq e -p=xml '.myNumberField |= from_yaml' my.xml
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
XML nodes that have attributes then plain content, e.g:
|
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<cat name="tiger">meow</cat>
|
<cat name="tiger">meow</cat>
|
||||||
```
|
```
|
||||||
|
@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
Encode and decode to and from XML. Whitespace is not conserved for round trips - but the order of the fields are.
|
Encode and decode to and from XML. Whitespace is not conserved for round trips - but the order of the fields are.
|
||||||
|
|
||||||
As yaml does not have the concept of attributes, xml attributes are converted to regular fields with a prefix to prevent clobbering. This defaults to "+", use the `--xml-attribute-prefix` to change.
|
|
||||||
|
|
||||||
Consecutive xml nodes with the same name are assumed to be arrays.
|
Consecutive xml nodes with the same name are assumed to be arrays.
|
||||||
|
|
||||||
All values in XML are assumed to be strings - but you can use `from_yaml` to parse them into their correct types:
|
All values in XML are assumed to be strings - but you can use `from_yaml` to parse them into their correct types:
|
||||||
@ -14,8 +12,6 @@ yq e -p=xml '.myNumberField |= from_yaml' my.xml
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
XML nodes that have attributes then plain content, e.g:
|
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<cat name="tiger">meow</cat>
|
<cat name="tiger">meow</cat>
|
||||||
```
|
```
|
||||||
@ -58,7 +54,7 @@ animal:
|
|||||||
```
|
```
|
||||||
|
|
||||||
## Parse xml: attributes
|
## Parse xml: attributes
|
||||||
Attributes are converted to fields, with the attribute prefix.
|
Attributes are converted to fields, with the default attribute prefix '+'. Use '--xml-attribute-prefix` to set your own.
|
||||||
|
|
||||||
Given a sample.xml file of:
|
Given a sample.xml file of:
|
||||||
```xml
|
```xml
|
||||||
@ -79,7 +75,7 @@ cat:
|
|||||||
```
|
```
|
||||||
|
|
||||||
## Parse xml: attributes with content
|
## Parse xml: attributes with content
|
||||||
Content is added as a field, using the content name
|
Content is added as a field, using the default content name of '+content'. Use `--xml-content-name` to set your own.
|
||||||
|
|
||||||
Given a sample.xml file of:
|
Given a sample.xml file of:
|
||||||
```xml
|
```xml
|
||||||
@ -271,24 +267,18 @@ for x --></x>
|
|||||||
```
|
```
|
||||||
then
|
then
|
||||||
```bash
|
```bash
|
||||||
yq e -p=xml '.' sample.xml
|
yq e -p=xml -o=xml '.' sample.xml
|
||||||
```
|
```
|
||||||
will output
|
will output
|
||||||
```yaml
|
```xml
|
||||||
# before cat
|
<!-- before cat --><cat><!-- in cat before -->
|
||||||
cat:
|
<x>3<!-- multi
|
||||||
# in cat before
|
line comment
|
||||||
x: "3" # multi
|
for x --></x><!-- before y -->
|
||||||
# line comment
|
<y><!-- in y before
|
||||||
# for x
|
in d before -->
|
||||||
# before y
|
<d>z<!-- in d after --></d><!-- in y after -->
|
||||||
|
</y><!-- in_cat_after -->
|
||||||
y:
|
</cat><!-- after cat -->
|
||||||
# in y before
|
|
||||||
# in d before
|
|
||||||
d: z # in d after
|
|
||||||
# in y after
|
|
||||||
# in_cat_after
|
|
||||||
# after cat
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -217,13 +217,13 @@ var xmlScenarios = []xmlScenario{
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "Parse xml: attributes",
|
description: "Parse xml: attributes",
|
||||||
subdescription: "Attributes are converted to fields, with the attribute prefix.",
|
subdescription: "Attributes are converted to fields, with the default attribute prefix '+'. Use '--xml-attribute-prefix` to set your own.",
|
||||||
input: "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<cat legs=\"4\">\n <legs>7</legs>\n</cat>",
|
input: "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<cat legs=\"4\">\n <legs>7</legs>\n</cat>",
|
||||||
expected: "D0, P[], (doc)::cat:\n +legs: \"4\"\n legs: \"7\"\n",
|
expected: "D0, P[], (doc)::cat:\n +legs: \"4\"\n legs: \"7\"\n",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "Parse xml: attributes with content",
|
description: "Parse xml: attributes with content",
|
||||||
subdescription: "Content is added as a field, using the content name",
|
subdescription: "Content is added as a field, using the default content name of '+content'. Use `--xml-content-name` to set your own.",
|
||||||
input: "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<cat legs=\"4\">meow</cat>",
|
input: "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<cat legs=\"4\">meow</cat>",
|
||||||
expected: "D0, P[], (doc)::cat:\n +content: meow\n +legs: \"4\"\n",
|
expected: "D0, P[], (doc)::cat:\n +content: meow\n +legs: \"4\"\n",
|
||||||
},
|
},
|
||||||
@ -313,6 +313,8 @@ func documentXmlScenario(t *testing.T, w *bufio.Writer, i interface{}) {
|
|||||||
}
|
}
|
||||||
if s.scenarioType == "encode" {
|
if s.scenarioType == "encode" {
|
||||||
documentXmlEncodeScenario(w, s)
|
documentXmlEncodeScenario(w, s)
|
||||||
|
} else if s.scenarioType == "roundtrip" {
|
||||||
|
documentXmlRoundTripScenario(w, s)
|
||||||
} else {
|
} else {
|
||||||
documentXmlDecodeScenario(t, w, s)
|
documentXmlDecodeScenario(t, w, s)
|
||||||
}
|
}
|
||||||
@ -366,6 +368,24 @@ func documentXmlEncodeScenario(w *bufio.Writer, s xmlScenario) {
|
|||||||
writeOrPanic(w, fmt.Sprintf("```xml\n%v```\n\n", processScenario(s)))
|
writeOrPanic(w, fmt.Sprintf("```xml\n%v```\n\n", processScenario(s)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func documentXmlRoundTripScenario(w *bufio.Writer, s xmlScenario) {
|
||||||
|
writeOrPanic(w, fmt.Sprintf("## %v\n", s.description))
|
||||||
|
|
||||||
|
if s.subdescription != "" {
|
||||||
|
writeOrPanic(w, s.subdescription)
|
||||||
|
writeOrPanic(w, "\n\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
writeOrPanic(w, "Given a sample.xml file of:\n")
|
||||||
|
writeOrPanic(w, fmt.Sprintf("```xml\n%v\n```\n", s.input))
|
||||||
|
|
||||||
|
writeOrPanic(w, "then\n")
|
||||||
|
writeOrPanic(w, "```bash\nyq e -p=xml -o=xml '.' sample.xml\n```\n")
|
||||||
|
writeOrPanic(w, "will output\n")
|
||||||
|
|
||||||
|
writeOrPanic(w, fmt.Sprintf("```xml\n%v```\n\n", processScenario(s)))
|
||||||
|
}
|
||||||
|
|
||||||
func TestXmlScenarios(t *testing.T) {
|
func TestXmlScenarios(t *testing.T) {
|
||||||
for _, tt := range xmlScenarios {
|
for _, tt := range xmlScenarios {
|
||||||
testXmlScenario(t, tt)
|
testXmlScenario(t, tt)
|
||||||
|
Loading…
Reference in New Issue
Block a user