Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
1
Task/XML-Input/Jq/xml-input-1.jq
Normal file
1
Task/XML-Input/Jq/xml-input-1.jq
Normal file
|
|
@ -0,0 +1 @@
|
|||
xq -r '.Students.Student[]."@Name"' students.xml
|
||||
1
Task/XML-Input/Jq/xml-input-2.jq
Normal file
1
Task/XML-Input/Jq/xml-input-2.jq
Normal file
|
|
@ -0,0 +1 @@
|
|||
include "peg" {search: "."};
|
||||
38
Task/XML-Input/Jq/xml-input-3.jq
Normal file
38
Task/XML-Input/Jq/xml-input-3.jq
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
def XML:
|
||||
def String : ((consume("\"") | parse("[^\"]*") | consume("\"")) //
|
||||
(consume("'") | parse("[^']*") | consume("'")));
|
||||
|
||||
def CDataSec : box("@CDATA"; q("<![CDATA[") | string_except("]]>") | q("]]>") ) | ws;
|
||||
def PROLOG : box("@PROLOG"; q("<?xml") | string_except("\\?>") | q("?>"));
|
||||
def DTD : box("@DTD"; q("<!") | parse("[^>]") | q(">"));
|
||||
# The XML spec specifically disallows double-hyphen within comments
|
||||
def COMMENT : box("@COMMENT"; q("<!--") | string_except("--") | q("-->"));
|
||||
|
||||
def CharData : parse("[^<]+"); # only `<` is disallowed
|
||||
|
||||
# This is more permissive than required:
|
||||
def Name : parse("[A-Za-z:_][^/=<>\n\r\t ]*");
|
||||
|
||||
def Attribute : keyvalue(Name | ws | q("=") | ws | String | ws);
|
||||
def Attributes: box( plus(Attribute) ) | .result[-1] |= {"@attributes": add} ;
|
||||
|
||||
# <foo> must be matched with </foo>
|
||||
def Element :
|
||||
def Content : star(Element // CDataSec // CharData // COMMENT);
|
||||
objectify( q("<")
|
||||
| Name
|
||||
| .result[-1] as $name
|
||||
| ws
|
||||
| (Attributes // ws)
|
||||
| ( (q("/>")
|
||||
// (q(">") | Content | q("</") | q($name) | ws | q(">")))
|
||||
| ws) ) ;
|
||||
|
||||
{remainder: . }
|
||||
| ws
|
||||
| optional(PROLOG) | ws
|
||||
| optional(DTD) | ws
|
||||
| star(COMMENT | ws)
|
||||
| Element | ws # for HTML, one would use star(Element) here
|
||||
| star(COMMENT | ws)
|
||||
| .result;
|
||||
22
Task/XML-Input/Jq/xml-input-4.jq
Normal file
22
Task/XML-Input/Jq/xml-input-4.jq
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
# For handling hex character codes &#x
|
||||
def hex2i:
|
||||
def toi: if . >= 87 then .-87 else . - 48 end;
|
||||
reduce ( ascii_downcase | explode | map(toi) | reverse[]) as $i ([1, 0]; # [power, sum]
|
||||
.[1] += $i * .[0]
|
||||
| .[0] *= 16 )
|
||||
| .[1];
|
||||
|
||||
def hexcode2json:
|
||||
gsub("&#x(?<x>....);" ; .x | [hex2i] | implode) ;
|
||||
|
||||
def jsonify:
|
||||
walk( if type == "array"
|
||||
then map(select(type == "string" and test("^\n *$") | not))
|
||||
elif type == "string" then hexcode2json
|
||||
else . end);
|
||||
|
||||
# First convert to JSON ...
|
||||
XML | jsonify
|
||||
# ... and then extract Student Names
|
||||
| .[]
|
||||
| (.Students[].Student[]["@attributes"] // empty).Name
|
||||
Loading…
Add table
Add a link
Reference in a new issue