Esempio n. 1
0
def parseDTDString(data, path):
    result = []
    currentComment = [None]

    parser = ParserCreate()
    parser.UseForeignDTD(True)
    parser.SetParamEntityParsing(XML_PARAM_ENTITY_PARSING_ALWAYS)

    def ExternalEntityRefHandler(context, base, systemId, publicId):
        subparser = parser.ExternalEntityParserCreate(context, 'utf-8')
        subparser.Parse(data.encode('utf-8'), True)
        return 1

    def CommentHandler(data):
        currentComment[0] = data.strip()

    def EntityDeclHandler(entityName, is_parameter_entity, value, base,
                          systemId, publicId, notationName):
        result.append((unescapeEntity(entityName), currentComment[0],
                       unescapeEntity(value.strip())))
        currentComment[0] = None

    parser.ExternalEntityRefHandler = ExternalEntityRefHandler
    parser.CommentHandler = CommentHandler
    parser.EntityDeclHandler = EntityDeclHandler
    parser.Parse('<!DOCTYPE root SYSTEM "foo"><root/>', True)

    for entry in result:
        yield entry
Esempio n. 2
0
def parseDTDString(data, path):
  result = []
  currentComment = [None]

  parser = ParserCreate()
  parser.UseForeignDTD(True)
  parser.SetParamEntityParsing(XML_PARAM_ENTITY_PARSING_ALWAYS)

  def ExternalEntityRefHandler(context, base, systemId, publicId):
    subparser = parser.ExternalEntityParserCreate(context, 'utf-8')
    subparser.Parse(data.encode('utf-8'), True)
    return 1

  def CommentHandler(data):
    currentComment[0] = data.strip()

  def EntityDeclHandler(entityName, is_parameter_entity, value, base, systemId, publicId, notationName):
    result.append((unescapeEntity(entityName), currentComment[0], unescapeEntity(value.strip())))
    currentComment[0] = None

  parser.ExternalEntityRefHandler = ExternalEntityRefHandler
  parser.CommentHandler = CommentHandler
  parser.EntityDeclHandler = EntityDeclHandler
  parser.Parse('<!DOCTYPE root SYSTEM "foo"><root/>', True)

  for entry in result:
    yield entry
Esempio n. 3
0
 def getXmlInfo(self):
     print '[PrestigesatEditor] trying to get the XML declaration and comment'
     parser = ParserCreate()
     parser.XmlDeclHandler = self.declarationHandler
     parser.CommentHandler = self.commentHandler
     satFile = open(TMPFILE, 'r')
     parser.ParseFile(satFile)
     satFile.close()
Esempio n. 4
0
 def handle_namespaces(self, parser):
     """Do not check namespaces for grammars used by ns-specific tools."""
     if Language.get_language(self.file_name) in self.non_ns_types:
         xparser = ParserCreate()
         xparser.DefaultHandlerExpand = parser._default
         xparser.StartElementHandler = parser._start
         xparser.EndElementHandler = parser._end
         xparser.CharacterDataHandler = parser._data
         xparser.CommentHandler = parser._comment
         xparser.ProcessingInstructionHandler = parser._pi
         # Set the etree parser to use the expat non-ns parser.
         parser.parser = parser._parser = xparser
Esempio n. 5
0
 def handle_namespaces(self, parser):
     """Do not check namespaces for grammars used by ns-specific tools."""
     if Language.get_language(self.file_name) in self.non_ns_types:
         xparser = ParserCreate()
         xparser.DefaultHandlerExpand = parser._default
         xparser.StartElementHandler = parser._start
         xparser.EndElementHandler = parser._end
         xparser.CharacterDataHandler = parser._data
         xparser.CommentHandler = parser._comment
         xparser.ProcessingInstructionHandler = parser._pi
         # Set the etree parser to use the expat non-ns parser.
         parser.parser = parser._parser = xparser
Esempio n. 6
0
 def parse(cls, fname: Text) -> 'FMXml':
     """parse Nodes from xml.
     """
     ret = FMXml()
     parser = ParserCreate()
     parser.StartElementHandler = ret.enter_tag
     parser.EndElementHandler = ret.leave_tag
     parser.CharacterDataHandler = ret.enter_chars
     parser.CommentHandler = ret.enter_comment
     with open(fname, "rb") as fp:
         parser.ParseFile(fp)
     return ret
Esempio n. 7
0
    def parse(self, filename):
        self.secrets_file = open('parts/_actual_secrets.txt', 'wb')
        self.mock_secrets_file = open('parts/_example_secrets.txt', 'wb')
        parser = ParserCreate()
        parser.CommentHandler = self.commentHandler
        parser.StartElementHandler = self.startElement
        parser.EndElementHandler = self.endElement
        parser.CharacterDataHandler = self.characters

        parser.StartCdataSectionHandler = self.startCDATA
        parser.EndCdataSectionHandler = self.endCDATA

        saxutils.XMLGenerator(out=self.master_header).startDocument()
        self.master_header.write(b'<!DOCTYPE erddapDatasets [\n')
        self.master_header.write(
            b'<!ENTITY % secrets SYSTEM "_secrets.txt">\n')
        self.master_header.write(b'%secrets;\n')
        parser.ParseFile(open(filename, "rb"))
        self.master_header.write(b']>\n')
        self.master_header.write(self.out_file.master_file.getvalue())
        with open("parts/_datasets.xml", "wb") as f:
            f.write(self.master_header.getvalue())
        self.secrets_file.close()
        self.mock_secrets_file.close()