Skip to content

Commit df32bae

Browse files
authored
Added XML decoder (mikefarah#1044)
1 parent 915e9de commit df32bae

File tree

154 files changed

+725
-113
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

154 files changed

+725
-113
lines changed

LICENSE

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
The MIT License (MIT)
2+
13
Copyright (c) 2017 Mike Farah
24

35
Permission is hereby granted, free of charge, to any person obtaining a copy

cmd/constant.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ var unwrapScalar = true
66
var writeInplace = false
77
var outputToJSON = false
88
var outputFormat = "yaml"
9+
var inputFormat = "yaml"
10+
11+
var xmlAttributePrefix = "+"
12+
var xmlContentName = "+content"
913

1014
var exitStatus = false
1115
var forceColor = false

cmd/evaluate_all_command.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,11 @@ func evaluateAll(cmd *cobra.Command, args []string) error {
7575
return err
7676
}
7777

78+
decoder, err := configureDecoder()
79+
if err != nil {
80+
return err
81+
}
82+
7883
printerWriter := configurePrinterWriter(format, out)
7984

8085
printer := yqlib.NewPrinter(printerWriter, format, unwrapScalar, colorsEnabled, indent, !noDocSeparators)
@@ -99,7 +104,7 @@ func evaluateAll(cmd *cobra.Command, args []string) error {
99104
switch len(args) {
100105
case 0:
101106
if pipingStdIn {
102-
err = allAtOnceEvaluator.EvaluateFiles(processExpression(""), []string{"-"}, printer, leadingContentPreProcessing)
107+
err = allAtOnceEvaluator.EvaluateFiles(processExpression(""), []string{"-"}, printer, leadingContentPreProcessing, decoder)
103108
} else {
104109
cmd.Println(cmd.UsageString())
105110
return nil
@@ -108,10 +113,10 @@ func evaluateAll(cmd *cobra.Command, args []string) error {
108113
if nullInput {
109114
err = yqlib.NewStreamEvaluator().EvaluateNew(processExpression(args[0]), printer, "")
110115
} else {
111-
err = allAtOnceEvaluator.EvaluateFiles(processExpression(""), []string{args[0]}, printer, leadingContentPreProcessing)
116+
err = allAtOnceEvaluator.EvaluateFiles(processExpression(""), []string{args[0]}, printer, leadingContentPreProcessing, decoder)
112117
}
113118
default:
114-
err = allAtOnceEvaluator.EvaluateFiles(processExpression(args[0]), args[1:], printer, leadingContentPreProcessing)
119+
err = allAtOnceEvaluator.EvaluateFiles(processExpression(args[0]), args[1:], printer, leadingContentPreProcessing, decoder)
115120
}
116121

117122
completedSuccessfully = err == nil

cmd/evalute_sequence_command.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,11 @@ func evaluateSequence(cmd *cobra.Command, args []string) error {
9292

9393
printer := yqlib.NewPrinter(printerWriter, format, unwrapScalar, colorsEnabled, indent, !noDocSeparators)
9494

95+
decoder, err := configureDecoder()
96+
if err != nil {
97+
return err
98+
}
99+
95100
streamEvaluator := yqlib.NewStreamEvaluator()
96101

97102
if frontMatter != "" {
@@ -113,7 +118,7 @@ func evaluateSequence(cmd *cobra.Command, args []string) error {
113118
switch len(args) {
114119
case 0:
115120
if pipingStdIn {
116-
err = streamEvaluator.EvaluateFiles(processExpression(""), []string{"-"}, printer, leadingContentPreProcessing)
121+
err = streamEvaluator.EvaluateFiles(processExpression(""), []string{"-"}, printer, leadingContentPreProcessing, decoder)
117122
} else {
118123
cmd.Println(cmd.UsageString())
119124
return nil
@@ -122,10 +127,10 @@ func evaluateSequence(cmd *cobra.Command, args []string) error {
122127
if nullInput {
123128
err = streamEvaluator.EvaluateNew(processExpression(args[0]), printer, "")
124129
} else {
125-
err = streamEvaluator.EvaluateFiles(processExpression(""), []string{args[0]}, printer, leadingContentPreProcessing)
130+
err = streamEvaluator.EvaluateFiles(processExpression(""), []string{args[0]}, printer, leadingContentPreProcessing, decoder)
126131
}
127132
default:
128-
err = streamEvaluator.EvaluateFiles(processExpression(args[0]), args[1:], printer, leadingContentPreProcessing)
133+
err = streamEvaluator.EvaluateFiles(processExpression(args[0]), args[1:], printer, leadingContentPreProcessing, decoder)
129134
}
130135
completedSuccessfully = err == nil
131136

cmd/root.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ See https://mikefarah.gitbook.io/yq/ for detailed documentation and examples.`,
4949
}
5050

5151
rootCmd.PersistentFlags().StringVarP(&outputFormat, "output-format", "o", "yaml", "[yaml|y|json|j|props|p] output format type.")
52+
rootCmd.PersistentFlags().StringVarP(&inputFormat, "input-format", "p", "yaml", "[yaml|y|xml|x] input format type.")
53+
54+
rootCmd.PersistentFlags().StringVar(&xmlAttributePrefix, "xml-attribute-prefix", "+", "prefix for xml attributes")
55+
rootCmd.PersistentFlags().StringVar(&xmlContentName, "xml-content-name", "+content", "name for xml content (if no attribute name is present).")
56+
5257
rootCmd.PersistentFlags().BoolVarP(&nullInput, "null-input", "n", false, "Don't read input, simply evaluate the expression given. Useful for creating yaml docs from scratch.")
5358
rootCmd.PersistentFlags().BoolVarP(&noDocSeparators, "no-doc", "N", false, "Don't print document separators (---)")
5459

cmd/utils.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,18 @@ func initCommand(cmd *cobra.Command, args []string) (firstFileIndex int, err err
4545
return firstFileIndex, nil
4646
}
4747

48+
func configureDecoder() (yqlib.Decoder, error) {
49+
yqlibInputFormat, err := yqlib.InputFormatFromString(inputFormat)
50+
if err != nil {
51+
return nil, err
52+
}
53+
switch yqlibInputFormat {
54+
case yqlib.XmlInputFormat:
55+
return yqlib.NewXmlDecoder(xmlAttributePrefix, xmlContentName), nil
56+
}
57+
return yqlib.NewYamlDecoder(), nil
58+
}
59+
4860
func configurePrinterWriter(format yqlib.PrinterOutputFormat, out io.Writer) yqlib.PrinterWriter {
4961

5062
var printerWriter yqlib.PrinterWriter

examples/mike.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<cat>3f</cat>
3+
<dog>meow:as</dog>
4+
<dog3>true</dog3>

examples/mike2.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!-- osm-->
3+
<osm version="0.6" generator="CGImap 0.0.2">
4+
<!-- bounds-->
5+
<bounds minlat="54.0889580" minlon="12.2487570" maxlat="54.0913900" maxlon="12.2524800">
6+
<!-- great -->
7+
cool
8+
</bounds>
9+
<foo>ba2234r</foo>
10+
<foo>bar2234233</foo>
11+
</osm>

go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ require (
88
github.com/magiconair/properties v1.8.5
99
github.com/spf13/cobra v1.3.0
1010
github.com/timtadh/lexmachine v0.2.2
11+
golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d
1112
gopkg.in/op/go-logging.v1 v1.0.0-20160211212156-b2cb9fa56473
1213
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
1314
)
@@ -19,6 +20,7 @@ require (
1920
github.com/spf13/pflag v1.0.5 // indirect
2021
github.com/timtadh/data-structures v0.5.3 // indirect
2122
golang.org/x/sys v0.0.0-20211205182925-97ca703d548d // indirect
23+
golang.org/x/text v0.3.7 // indirect
2224
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
2325
)
2426

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,7 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd
449449
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
450450
golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8=
451451
golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
452+
golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d h1:LO7XpTYMwTqxjLcGWPijK3vRXg1aWdlNOVOHRq45d7c=
452453
golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
453454
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
454455
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -553,6 +554,7 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
553554
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
554555
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
555556
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
557+
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
556558
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
557559
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
558560
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=

0 commit comments

Comments
 (0)