mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-13 06:43:52 +00:00
updated xml modules
This commit is contained in:
@@ -166,12 +166,12 @@ proc attrValue*(my: XmlParser): string {.inline.} =
|
||||
assert(my.kind == xmlAttribute)
|
||||
return my.b
|
||||
|
||||
proc PIName*(my: XmlParser): string {.inline.} =
|
||||
proc piName*(my: XmlParser): string {.inline.} =
|
||||
## returns the processing instruction name for the event ``xmlPI``
|
||||
assert(my.kind == xmlPI)
|
||||
return my.a
|
||||
|
||||
proc PIRest*(my: XmlParser): string {.inline.} =
|
||||
proc piRest*(my: XmlParser): string {.inline.} =
|
||||
## returns the rest of the processing instruction for the event ``xmlPI``
|
||||
assert(my.kind == xmlPI)
|
||||
return my.b
|
||||
@@ -641,7 +641,7 @@ when isMainModule:
|
||||
of xmlCharData: echo(x.charData)
|
||||
of xmlWhitespace: echo("|$1|" % x.charData)
|
||||
of xmlComment: echo("<!-- $1 -->" % x.charData)
|
||||
of xmlPI: echo("<? $1 ## $2 ?>" % [x.PIName, x.PIRest])
|
||||
of xmlPI: echo("<? $1 ## $2 ?>" % [x.piName, x.piRest])
|
||||
of xmlElementStart: echo("<$1>" % x.elementName)
|
||||
of xmlElementEnd: echo("</$1>" % x.elementName)
|
||||
|
||||
|
||||
@@ -15,13 +15,13 @@ import xmldom, os, streams, parsexml, strutils
|
||||
|
||||
type
|
||||
# Parsing errors
|
||||
EMismatchedTag* = object of EInvalidValue ## Raised when a tag is not properly closed
|
||||
EParserError* = object of EInvalidValue ## Raised when an unexpected XML Parser event occurs
|
||||
EMismatchedTag* = object of ValueError ## Raised when a tag is not properly closed
|
||||
EParserError* = object of ValueError ## Raised when an unexpected XML Parser event occurs
|
||||
|
||||
# For namespaces
|
||||
xmlnsAttr = tuple[name, value: string, ownerElement: PElement]
|
||||
XmlnsAttr = tuple[name, value: string, ownerElement: PElement]
|
||||
|
||||
var nsList: seq[xmlnsAttr] = @[] # Used for storing namespaces
|
||||
var nsList: seq[XmlnsAttr] = @[] # Used for storing namespaces
|
||||
|
||||
proc getNS(prefix: string): string =
|
||||
var defaultNS: seq[string] = @[]
|
||||
@@ -43,13 +43,13 @@ proc getNS(prefix: string): string =
|
||||
|
||||
return ""
|
||||
|
||||
proc parseText(x: var TXmlParser, doc: var PDocument): PText =
|
||||
proc parseText(x: var XmlParser, doc: var PDocument): PText =
|
||||
result = doc.createTextNode(x.charData())
|
||||
|
||||
proc parseElement(x: var TXmlParser, doc: var PDocument): PElement =
|
||||
proc parseElement(x: var XmlParser, doc: var PDocument): PElement =
|
||||
var n = doc.createElement("")
|
||||
|
||||
while True:
|
||||
while true:
|
||||
case x.kind()
|
||||
of xmlEof:
|
||||
break
|
||||
@@ -102,10 +102,10 @@ proc parseElement(x: var TXmlParser, doc: var PDocument): PElement =
|
||||
of xmlComment:
|
||||
n.appendChild(doc.createComment(x.charData()))
|
||||
of xmlPI:
|
||||
n.appendChild(doc.createProcessingInstruction(x.PIName(), x.PIRest()))
|
||||
n.appendChild(doc.createProcessingInstruction(x.piName(), x.piRest()))
|
||||
|
||||
of xmlWhitespace, xmlElementClose, xmlEntity, xmlSpecial:
|
||||
# Unused 'events'
|
||||
discard " Unused \'events\'"
|
||||
|
||||
else:
|
||||
raise newException(EParserError, "Unexpected XML Parser event")
|
||||
@@ -114,30 +114,30 @@ proc parseElement(x: var TXmlParser, doc: var PDocument): PElement =
|
||||
raise newException(EMismatchedTag,
|
||||
"Mismatched tag at line " & $x.getLine() & " column " & $x.getColumn)
|
||||
|
||||
proc loadXMLStream*(stream: PStream): PDocument =
|
||||
proc loadXMLStream*(stream: Stream): PDocument =
|
||||
## Loads and parses XML from a stream specified by ``stream``, and returns
|
||||
## a ``PDocument``
|
||||
|
||||
var x: TXmlParser
|
||||
var x: XmlParser
|
||||
open(x, stream, nil, {reportComments})
|
||||
|
||||
var XmlDoc: PDocument
|
||||
var DOM: PDOMImplementation = getDOM()
|
||||
var xmlDoc: PDocument
|
||||
var dom: PDOMImplementation = getDOM()
|
||||
|
||||
while True:
|
||||
while true:
|
||||
x.next()
|
||||
case x.kind()
|
||||
of xmlEof:
|
||||
break
|
||||
of xmlElementStart, xmlElementOpen:
|
||||
var el: PElement = parseElement(x, XmlDoc)
|
||||
XmlDoc = dom.createDocument(el)
|
||||
var el: PElement = parseElement(x, xmlDoc)
|
||||
xmlDoc = dom.createDocument(el)
|
||||
of xmlWhitespace, xmlElementClose, xmlEntity, xmlSpecial:
|
||||
# Unused 'events'
|
||||
discard " Unused \'events\'"
|
||||
else:
|
||||
raise newException(EParserError, "Unexpected XML Parser event")
|
||||
|
||||
return XmlDoc
|
||||
return xmlDoc
|
||||
|
||||
proc loadXML*(xml: string): PDocument =
|
||||
## Loads and parses XML from a string specified by ``xml``, and returns
|
||||
@@ -151,7 +151,7 @@ proc loadXMLFile*(path: string): PDocument =
|
||||
## a ``PDocument``
|
||||
|
||||
var s = newFileStream(path, fmRead)
|
||||
if s == nil: raise newException(EIO, "Unable to read file " & path)
|
||||
if s == nil: raise newException(IOError, "Unable to read file " & path)
|
||||
return loadXMLStream(s)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user