我编写了一个 Ruby 脚本来通过 TCP 套接字连接到 XML 流。我想使用 LibXML 解析这个 XML 流)。我的问题是我不知道如何将此流传递给 LibXML。从 LibXML 文档XML::Document.io(io)这似乎是为 HTTP 设置的,而不是 TCP 套接字。关于如何包装我的 TCP 套接字以便 LibXML 可以使用它的任何帮助?或者有没有更好的方法从我的 TCP 套接字解析这个 XML 流?我现在正在学习 Ruby,所以下面的代码也不是我认证的方式。根据关于 stackoverflow 的其他问题,似乎我必须确保在将 XML 发送到 LibXML 解析器之前拥有完整的 XML(正确的结束标记)。提前致谢。
这是我到目前为止所拥有的:
require 'socket'
require 'timeout'
username = "username\r\n"
password = "password\r\n"
port = 4500
server = 'xmlfeed.website.com'
tcp_client = TCPSocket.new(server, port)
all_data = []
value = 0
while true
partial_data = tcp_client.recv(1012)
if partial_data.length == 0
break
end
all_data << partial_data
puts(all_data)
if value == 0
tcp_client.puts(username)
value = 1
end
if value == 1
tcp_client.puts(password)
value = 2
end
if all_data.to_s.chomp.casecmp( "Starting Feed")
value = 3
puts "Begin the feed"
end
if value == 3
# Parse the data using LibXML
# this is the part I'm not sure how to approach
puts(all_data)
end
end
tcp_client.close
puts all_data.join()