OSDN Git Service

First commit::
[xmail/XMAIL-viewer.git] / graph-db / app / Script / xml2cypher.py
1 #!/usr/bin/env python3
2
3 import sys, codecs
4 import re
5 import xml.etree.ElementTree as ET
6
7 #sys.stdout = codecs.getwriter("utf-8")(sys.stdout)
8
9 ###
10
11 def subtree(e, h, n, p, r):
12   tag2 = re.sub(r'^{.*}', '', e.tag)
13   #print '#', h, n, e.tag, e.attrib, '=> "%s"' % tag2
14   print('create (%s:XMLtag { __tag: "%s"' % (n, tag2))
15   for name, value in list(e.attrib.items()):
16     name2 = re.sub(r'^{.*}', '', name)
17     name2 = name2.replace('.', '_')   ### attribute name may contain character '.'
18     #print '#  "%s" = "%s"' % (name2, value)
19     print('  , %s: "%s"' % (name2, value))
20   print('  })')
21   print('create (%s)-[:%s]->(%s)' % (p, r, n))
22
23   if (e.text is not None) and (re.match('\S', e.text)):
24     #print '#', h, "text: '%s'" % e.text
25     print('create (%s:XMLdata { value: "%s" })' % (n + "d", e.text))
26     print('create (%s)-[:XML_Data]->(%s)' % (n, n + "d"))
27   if (e.tail is not None) and (re.match('\S', e.tail)):
28     #print '#', h, "tail: '%s'" % e.tail
29     print('create (%s:XMLdata { value: "%s" })' % (n + "d", e.text))
30     print('create (%s)-[:XML_Data]->(%s)' % (n, n + "d"))
31   for i, s in enumerate(e):
32     subtree(s, h + "[%d]>>> " % i, n + "_%d" % i, n, 'XML_Child')
33
34 ###
35
36 xmail_node = "nx"
37 top_node = "n"
38 fname = sys.argv[1]
39 print('create (%s:XMAIL { file: "%s" })' % (xmail_node, fname))
40
41 tree = ET.parse(fname)
42 elem = tree.getroot()
43 subtree(elem, "", top_node, xmail_node, 'XML_Root')
44 print("return id(nx)")
45 print(";")
46
47 ###
48 ### end of script
49 ###