diff options
-rw-r--r-- | docs/left-right-xml | 171 | ||||
-rw-r--r-- | scripts/left-right-protocol-samples.xsl | 8 | ||||
-rw-r--r-- | scripts/rpki/left_right.py | 40 | ||||
-rwxr-xr-x | scripts/xml-parse-test.py | 38 | ||||
-rwxr-xr-x | scripts/xml-simple-dump.pl | 25 |
5 files changed, 136 insertions, 146 deletions
diff --git a/docs/left-right-xml b/docs/left-right-xml index 02f04487..5a6d58a9 100644 --- a/docs/left-right-xml +++ b/docs/left-right-xml @@ -4,12 +4,6 @@ - - See left-right-protocol for detailed comments, right now - I'm just working on translating Lisp pseudocode into XML. - - - - Perhaps nested elements that carry IDs for other objects in - - this system should use attributes rather than element content? - - Could make an argument either way on consistancy. - - - - "bsc" == "business signing context" --> <completely_gratuitous_wrapper_element_to_let_me_run_this_through_xmllint> @@ -22,7 +16,7 @@ </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <self self_id="42"/> + <self action="create" self_id="42"/> </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_request"> @@ -37,7 +31,7 @@ </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <self self_id="42"/> + <self action="set" self_id="42"/> </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_request"> @@ -45,7 +39,7 @@ </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <self self_id="42"> + <self action="get" self_id="42"> <extension_preference name="name">Launcelot</extension_preference> <extension_preference name="quest">Holy Grail</extension_preference> <extension_preference name="color">Blue</extension_preference> @@ -57,12 +51,12 @@ </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <self self_id="42"> + <self action="list" self_id="42"> <extension_preference name="name">Launcelot</extension_preference> <extension_preference name="quest">Holy Grail</extension_preference> <extension_preference name="color">Blue</extension_preference> </self> - <self self_id="99"> + <self action="list" self_id="99"> <extension_preference name="name">Arthur, King of the Britons</extension_preference> <extension_preference name="quest">Holy Grail</extension_preference> <extension_preference name="airspeed_velocity_of_an_unladen_swallow">African or European swallow?</extension_preference> @@ -74,32 +68,32 @@ </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <self self_id="42"/> + <self action="destroy" self_id="42"/> </msg> <!-- ==== --> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_request"> <bsc action="create" self_id="42"> - <signing_cert>cert1</signing_cert> + <signing_cert>Y2VydDEK</signing_cert> <generate_keypair key_type="rsa" hash_alg="sha1" key_length="2048"/> </bsc> </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <bsc bsc_id="17"> + <bsc action="create" bsc_id="17"> <pkcs10_cert_request>req</pkcs10_cert_request> </bsc> </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_request"> <bsc action="set" self_id="42" bsc_id="17"> - <signing_cert>cert2</signing_cert> + <signing_cert>Y2VydDIK</signing_cert> </bsc> </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <bsc bsc_id="17"/> + <bsc action="set" bsc_id="17"/> </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_request"> @@ -107,23 +101,22 @@ </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <bsc bsc_id="17"> - <signing_cert>cert1</signing_cert> - <signing_cert>cert2</signing_cert> - <public_key>key</public_key> + <bsc action="get" bsc_id="17"> + <signing_cert>Y2VydDEK</signing_cert> + <signing_cert>Y2VydDIK</signing_cert> + <public_key>cHVibGljX2tleQo=</public_key> </bsc> </msg> - <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_request"> <bsc action="list" self_id="42"/> </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <bsc bsc_id="17"> - <signing_cert>cert1</signing_cert> - <signing_cert>cert2</signing_cert> - <public_key>key</public_key> + <bsc action="list" bsc_id="17"> + <signing_cert>Y2VydDEK</signing_cert> + <signing_cert>Y2VydDIK</signing_cert> + <public_key>cHVibGljX2tleQo=</public_key> </bsc> </msg> @@ -132,32 +125,32 @@ </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <bsc bsc_id="17"/> + <bsc action="destroy" bsc_id="17"/> </msg> <!-- ==== --> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_request"> <parent action="create" self_id="42"> - <peer_ta>key</peer_ta> - <peer_contact uri="uri"/> - <sia_base uri="sia_base"/> - <bsc_link id="bsc"/> - <repository_link id="repository"/> + <peer_ta>cGVlcl90YQo=</peer_ta> + <peer_contact uri="https://re.bar.example/bandicoot/"/> + <sia_base uri="rsync://repo.foo.example/wombat/"/> + <bsc_link id="17"/> + <repository_link id="120"/> </parent> </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <parent parent_id="666"/> + <parent action="create" parent_id="666"/> </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_request"> <parent action="set" self_id="42" parent_id="666"> - <peer_ta>key</peer_ta> - <peer_contact uri="uri"/> - <sia_base uri="sia_base"/> - <bsc_link id="bsc"/> - <repository_link id="repository"/> + <peer_ta>cGVlcl90YQo=</peer_ta> + <peer_contact uri="https://re.bar.example/bandicoot/"/> + <sia_base uri="rsync://repo.foo.example/wombat/"/> + <bsc_link id="17"/> + <repository_link id="120"/> <rekey/> <reissue/> <revoke/> @@ -165,7 +158,7 @@ </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <parent parent_id="666"/> + <parent action="set" parent_id="666"/> </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_request"> @@ -173,12 +166,12 @@ </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <parent parent_id="666"> - <peer_ta>key</peer_ta> - <peer_contact uri="uri"/> - <sia_base uri="sia_base"/> - <bsc_link id="bsc"/> - <repository_link id="repository"/> + <parent action="get" parent_id="666"> + <peer_ta>cGVlcl90YQo=</peer_ta> + <peer_contact uri="https://re.bar.example/bandicoot/"/> + <sia_base uri="rsync://repo.foo.example/wombat/"/> + <bsc_link id="17"/> + <repository_link id="120"/> </parent> </msg> @@ -187,12 +180,12 @@ </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <parent parent_id="666"> - <peer_ta>key</peer_ta> - <peer_contact uri="uri"/> - <sia_base uri="sia_base"/> - <bsc_link id="bsc"/> - <repository_link id="repository"/> + <parent action="list" parent_id="666"> + <peer_ta>cGVlcl90YQo=</peer_ta> + <peer_contact uri="https://re.bar.example/bandicoot/"/> + <sia_base uri="rsync://repo.foo.example/wombat/"/> + <bsc_link id="17"/> + <repository_link id="120"/> </parent> </msg> @@ -201,34 +194,34 @@ </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <parent parent_id="666"/> + <parent action="destroy" parent_id="666"/> </msg> <!-- ==== --> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_request"> <child action="create" self_id="42"> - <peer_ta>key</peer_ta> - <bsc_link id="bsc"/> + <peer_ta>cGVlcl90YQo=</peer_ta> + <bsc_link id="17"/> <child_db_id id="child_db_id"/> </child> </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <child child_id="3"/> + <child action="create" child_id="3"/> </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_request"> <child action="set" self_id="42" child_id="3"> - <peer_ta>key</peer_ta> - <bsc_link id="bsc"/> + <peer_ta>cGVlcl90YQo=</peer_ta> + <bsc_link id="17"/> <child_db_id id="child_db_id"/> <reissue/> </child> </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <child child_id="3"/> + <child action="set" child_id="3"/> </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_request"> @@ -236,9 +229,9 @@ </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <child child_id="3"> - <peer_ta>key</peer_ta> - <bsc_link id="bsc"/> + <child action="get" child_id="3"> + <peer_ta>cGVlcl90YQo=</peer_ta> + <bsc_link id="17"/> <child_db_id id="child_db_id"/> </child> </msg> @@ -248,9 +241,9 @@ </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <child child_id="3"> - <peer_ta>key</peer_ta> - <bsc_link id="bsc"/> + <child action="list" child_id="3"> + <peer_ta>cGVlcl90YQo=</peer_ta> + <bsc_link id="17"/> <child_db_id id="child_db_id"/> </child> </msg> @@ -260,33 +253,33 @@ </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <child child_id="3"/> + <child action="destroy" child_id="3"/> </msg> <!-- ==== --> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_request"> <repository action="create" self_id="42"> - <peer_contact uri="uri"/> - <peer_ta>key</peer_ta> - <bsc_link id="bsc"/> + <peer_contact uri="https://re.bar.example/bandicoot/"/> + <peer_ta>cGVlcl90YQo=</peer_ta> + <bsc_link id="17"/> </repository> </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <repository repository_id="120"/> + <repository action="create" repository_id="120"/> </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_request"> <repository action="set" self_id="42" repository_id="120"> - <peer_contact uri="uri"/> - <peer_ta>key</peer_ta> - <bsc_link id="bsc"/> + <peer_contact uri="https://re.bar.example/bandicoot/"/> + <peer_ta>cGVlcl90YQo=</peer_ta> + <bsc_link id="17"/> </repository> </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <repository repository_id="120"/> + <repository action="set" repository_id="120"/> </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_request"> @@ -294,10 +287,10 @@ </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <repository repository_id="120"> - <peer_contact uri="uri"/> - <peer_ta>key</peer_ta> - <bsc_link id="bsc"/> + <repository action="get" repository_id="120"> + <peer_contact uri="https://re.bar.example/bandicoot/"/> + <peer_ta>cGVlcl90YQo=</peer_ta> + <bsc_link id="17"/> </repository> </msg> @@ -306,10 +299,10 @@ </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <repository repository_id="120"> - <peer_contact uri="uri"/> - <peer_ta>key</peer_ta> - <bsc_link id="bsc"/> + <repository action="list" repository_id="120"> + <peer_contact uri="https://re.bar.example/bandicoot/"/> + <peer_ta>cGVlcl90YQo=</peer_ta> + <bsc_link id="17"/> </repository> </msg> @@ -318,7 +311,7 @@ </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <repository repository_id="120"/> + <repository action="destroy" repository_id="120"/> </msg> <!-- ==== --> @@ -328,7 +321,7 @@ </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <route_origin route_origin_id="88"/> + <route_origin action="create" route_origin_id="88"/> </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_request"> @@ -339,7 +332,7 @@ </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <route_origin route_origin_id="88"/> + <route_origin action="set" route_origin_id="88"/> </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_request"> @@ -347,7 +340,7 @@ </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <route_origin route_origin_id="88"> + <route_origin action="get" route_origin_id="88"> <resources asn="12345" ipv4="10.0.0.44/32,10.2.0.6-10.2.0.77" ipv6="2002:a00::/48,2002:a02:6::-2002:a02:4d::"/> </route_origin> </msg> @@ -357,7 +350,7 @@ </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <route_origin route_origin_id="88"> + <route_origin action="list" route_origin_id="88"> <resources asn="12345" ipv4="10.0.0.44/32,10.2.0.6-10.2.0.77" ipv6="2002:a00::/48,2002:a02:6::-2002:a02:4d::"/> </route_origin> </msg> @@ -367,7 +360,7 @@ </msg> <msg version="1" xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" type="control_response"> - <route_origin route_origin_id="88"/> + <route_origin action="destroy" route_origin_id="88"/> </msg> <!-- ==== --> @@ -383,8 +376,8 @@ as="666"/> <resource_class subject_name="wombats are us" req_ipv4="10.0.0.0/8" - ipv4="10.2..0.6/32" ipv6= - "fe80:dead:beef::/48,fe80:dead:beef::-fe80:dead:beef::49" + ipv4="10.2..0.6/32" + ipv6="fe80:dead:beef::/48,fe80:dead:beef::-fe80:dead:beef::49" as="666"/> </list_resources> </msg> @@ -399,6 +392,6 @@ <!-- - Local Variables: - - compile-command: "xmllint -format left-right-xml" + - compile-command: "xmllint -noout left-right-xml" - End: --> diff --git a/scripts/left-right-protocol-samples.xsl b/scripts/left-right-protocol-samples.xsl index c314c169..da313544 100644 --- a/scripts/left-right-protocol-samples.xsl +++ b/scripts/left-right-protocol-samples.xsl @@ -27,3 +27,11 @@ </xsl:for-each> </xsl:template> </xsl:transform> + + +<!-- + - Local variables: + - mode: sgml + - compile-command: "xsltproc left-right-protocol-samples.xsl ../docs/left-right-xml" + - End: + --> diff --git a/scripts/rpki/left_right.py b/scripts/rpki/left_right.py index 9b926ddd..a0ca63fe 100644 --- a/scripts/rpki/left_right.py +++ b/scripts/rpki/left_right.py @@ -22,7 +22,7 @@ class extension_preference_elt(base_elt): """ def startElement(self, stack, name, attrs): - assert name == "extension_preference" + assert name == "extension_preference", "Unexpected name %s, stack %s" % (name, stack) self.name = attrs["name"] def endElement(self, stack, name, text): @@ -46,18 +46,18 @@ class self_elt(base_elt): if name == "extension_preference": pref = extension_preference_elt() self.prefs.append(pref) - stack.append(prefs) + stack.append(pref) pref.startElement(stack, name, attrs) elif name in self.booleans: setattr(self, name, True) else: - assert name == "self" + assert name == "self", "Unexpected name %s, stack %s" % (name, stack) self.action = attrs["action"] self.self_id = attrs.get("self_id") def endElement(self, stack, name, text): if name not in self.booleans: - assert name == "self" + assert name == "self", "Unexpected name %s, stack %s" % (name, stack) stack.pop() class bsc_elt(base_elt): @@ -74,7 +74,7 @@ class bsc_elt(base_elt): self.hash_alg = attrs["hash_alg"] self.key_length = attrs["key_length"] elif not name in ("signing_cert", "public_key", "pkcs10_cert_request"): - assert name == "bsc" + assert name == "bsc", "Unexpected name %s, stack %s" % (name, stack) self.action = attrs["action"] self.self_id = attrs["self_id"] self.bsc_id = attrs.get("bsc_id") @@ -86,8 +86,8 @@ class bsc_elt(base_elt): self.public_key = base64.b64decode(text) elif name == "pkcs10_cert_request": self.pkcs10_cert_request = base64.b64decode(text) - else: - assert name == "bsc" + elif name != "generate_keypair": + assert name == "bsc", "Unexpected name %s, stack %s" % (name, stack) stack.pop() class parent_elt(base_elt): @@ -108,7 +108,7 @@ class parent_elt(base_elt): elif name in self.booleans: setattr(self, name, True) elif name != "peer_ta": - assert name == "parent" + assert name == "parent", "Unexpected name %s, stack %s" % (name, stack) self.action = attrs["action"] self.self_id = attrs["self_id"] self.parent_id = attrs.get("parent_id") @@ -117,7 +117,7 @@ class parent_elt(base_elt): if name == "peer_ta": self.peer_ta = base64.b64decode(text) elif name not in self.booleans + self.ids + self.uris: - assert name == "parent" + assert name == "parent", "Unexpected name %s, stack %s" % (name, stack) stack.pop() class child_elt(base_elt): @@ -135,7 +135,7 @@ class child_elt(base_elt): elif name in self.booleans: setattr(self, name, True) elif name != "peer_ta": - assert name == "child" + assert name == "child", "Unexpected name %s, stack %s" % (name, stack) self.action = attrs["action"] self.self_id = attrs["self_id"] self.child_id = attrs.get("child_id") @@ -144,7 +144,7 @@ class child_elt(base_elt): if name == "peer_ta": self.peer_ta = base64.b64decode(text) elif name not in self.booleans + self.ids: - assert name == "child" + assert name == "child", "Unexpected name %s, stack %s" % (name, stack) stack.pop() class repository_elt(base_elt): @@ -155,7 +155,7 @@ class repository_elt(base_elt): elif name == "peer_contact": self.peer_contact = attrs["uri"] elif name != "peer_ta": - assert name == "repository" + assert name == "repository", "Unexpected name %s, stack %s" % (name, stack) self.action = attrs["action"] self.self_id = attrs["self_id"] self.repository_id = attrs.get("repository_id") @@ -164,7 +164,7 @@ class repository_elt(base_elt): if name == "peer_ta": self.peer_ta = base64.b64decode(text) elif name not in ("bsc_link", "peer_contact"): - assert name == "repository" + assert name == "repository", "Unexpected name %s, stack %s" % (name, stack) stack.pop() class route_origin_elt(base_elt): @@ -183,20 +183,20 @@ class route_origin_elt(base_elt): if "ipv6" in attrs: self.ipv6 = resource_set.resource_set_ipv6(attrs["ipv6"]) else: - assert name == "route_origin" + assert name == "route_origin", "Unexpected name %s, stack %s" % (name, stack) self.action = attrs["action"] self.self_id = attrs["self_id"] self.route_origin_id = attrs.get("route_origin_id") def endElement(self, stack, name, text): if name not in ("suppress_publication", "resources"): - assert name == "route_origin" + assert name == "route_origin", "Unexpected name %s, stack %s" % (name, stack) stack.pop() class resource_class_elt(base_elt): def startElement(self, stack, name, attrs): - assert name == "resource_class" + assert name == "resource_class", "Unexpected name %s, stack %s" % (name, stack) if "as" in attrs: self.as = resource_set.resource_set_as(attrs["as"]) if "req_as" in attrs: @@ -222,14 +222,14 @@ class list_resources_elt(base_elt): stack.append(rc) rc.startElement(stack, name, attrs) else: - assert name == "list_resources" + assert name == "list_resources", "Unexpected name %s, stack %s" % (name, stack) self.self_id = attrs["self_id"] self.child_id = attrs.get("child_id") class report_error_elt(base_elt): def startElement(self, stack, name, attrs): - assert name == "report_error" + assert name == "report_error", "Unexpected name %s, stack %s" % (name, stack) self.self_id = attrs["self_id"] self.error_code = attrs["error_code"] @@ -262,7 +262,7 @@ class msg(list): elt.startElement(stack, name, attrs) def endElement(self, stack, name, text): - assert name == "msg" + assert name == "msg", "Unexpected name %s, stack %s" % (name, stack) assert len(stack) == 1 stack.pop() @@ -280,4 +280,4 @@ class sax_handler(sax_utils.handler): def create_top_level(self, name, attrs): assert name == "msg" and attrs["version"] == "1" - return msg_elt() + return msg() diff --git a/scripts/xml-parse-test.py b/scripts/xml-parse-test.py index 27b57d1c..1f7954c3 100755 --- a/scripts/xml-parse-test.py +++ b/scripts/xml-parse-test.py @@ -1,15 +1,29 @@ # $Id$ -import glob, rpki.up_down, rpki.relaxng, xml.sax +import glob, rpki.up_down, rpki.left_right, rpki.relaxng, xml.sax -files = glob.glob("up-down-protocol-samples/*.xml") -files.sort() -for f in files: - handler = rpki.up_down.sax_handler() - fh = open(f, "r") - x = fh.read() - fh.close() - xml.sax.parseString(x, handler) - x = str(handler.result) - print x - rpki.relaxng.relaxng(x, "up-down-medium-schema.rng") +if False: + files = glob.glob("up-down-protocol-samples/*.xml") + files.sort() + for f in files: + handler = rpki.up_down.sax_handler() + fh = open(f, "r") + x = fh.read() + fh.close() + xml.sax.parseString(x, handler) + x = str(handler.result) + print x + rpki.relaxng.relaxng(x, "up-down-medium-schema.rng") + +if True: + files = glob.glob("left-right-protocol-samples/*.xml") + files.sort() + for f in files: + handler = rpki.left_right.sax_handler() + fh = open(f, "r") + x = fh.read() + fh.close() + xml.sax.parseString(x, handler) + x = str(handler.result) + print x +# rpki.relaxng.relaxng(x, "left-right-schema.rng") diff --git a/scripts/xml-simple-dump.pl b/scripts/xml-simple-dump.pl deleted file mode 100755 index 909517c9..00000000 --- a/scripts/xml-simple-dump.pl +++ /dev/null @@ -1,25 +0,0 @@ -# $Id$ -# -# XML::Simple is relatively easy to use (have you looked at the -# alternatives?) but sometimes even XML::Simple's internal -# representation is not immediately obvious. On days when it'd be -# easier to write the XML by hand and let a machine tell you how -# XML::Simple would represent it, run this script. - -eval 'exec perl -w -S $0 ${1+"$@"}' - if 0; - -use strict; -use XML::Simple; -use Data::Dumper; - -my $xs = XML::Simple->new(KeepRoot => 1, - ForceArray => [qw(list_class)], - KeyAttr => [qw(header)], - NormalizeSpace => 2); - -my @xml = <>; -shift(@xml) while (@xml && $xml[0] =~ /^\s*$/); -$xml[0] =~ s/^\s+// if (@xml); - -print(Dumper($xs->XMLin(join('', @xml)))); |