https://nim-lang.org/docs/parsexml.html
文档仅使用open
从文件字符串流进行解析,但是如果我只有一个纯字符串(例如httpclient client.get正文),我将如何处理。
答案 0 :(得分:1)
我知道了!您实际上不应该使用parsexml
。您将xmldom
和xmldomparser
与loadXML
过程一起使用(传递字符串!)。
答案 1 :(得分:1)
要在内存字符串中使用parsexml
,必须使用streams module从字符串中创建流。 parsexml
模块嵌入了一个示例以从文件中读取内容,以下是您需要更改以使其从字符串进行解析的行:
var filename = addFileExt(paramStr(1), "html")
let buffer = readFile(filename)
var s = newStringStream(buffer)
if s == nil: quit("cannot open the file " & filename)
完整示例如下:
import os, streams, parsexml, strutils
if paramCount() < 1:
quit("Usage: htmltitle filename[.html]")
var filename = addFileExt(paramStr(1), "html")
let buffer = readFile(filename)
var s = newStringStream(buffer)
if s == nil: quit("cannot open the file " & filename)
var x: XmlParser
open(x, s, filename)
while true:
x.next()
case x.kind
of xmlElementStart:
if cmpIgnoreCase(x.elementName, "title") == 0:
var title = ""
x.next() # skip "<title>"
while x.kind == xmlCharData:
title.add(x.charData)
x.next()
if x.kind == xmlElementEnd and cmpIgnoreCase(x.elementName, "title") == 0:
echo("Title: " & title)
quit(0) # Success!
else:
echo(x.errorMsgExpected("/title"))
of xmlEof: break # end of file reached
else: discard # ignore other events
x.close()
quit("Could not determine title!")