java - 当您不拥有 Socket 服务器并且看不到它在做什么时,从 Socket Connection 解析输入字符串的最佳方法是什么?
问题描述
我以前发过这个。我对这种情况完全陌生。我精通 M3/MOVEX 专有软件,但我以前从未使用套接字连接到服务器。我已经到了这一点:我可以连接——我可以向服务器发送一个 XML 字符串——我可以得到一个响应并将其放入一个字符串中。我已经尝试过文档生成器来解析它,但是当我这样做时,文档返回为空。
try {
//TCPSocket = new Socket("10.33.106.29", 10101);
//Open the socket connection
TCPSocket = new Socket("idc-v-pobap02t.ebsco.com", 10101);
//TCPSocket = new Socket("idc-v-pobap02t", 10101);
//Initialize the reader and writer for the socket
is = new BufferedReader(new
InputStreamReader(TCPSocket.getInputStream()));
pw = new PrintWriter(TCPSocket.getOutputStream(), true);
//Send Data to the socket server
if (TCPSocket != null && is != null) {
pw.println(XMLString + "\n");
pw.flush();
}
///The
while((responseLine = is.readLine()) != null){
//Do Something
}
//Hangs so I took it out
//Read the Data from the socket server.
responseLine = is.readLine(); //Has my input XML String
is.close();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
builder = factory.newDocumentBuilder();
doc = builder.newDocument();
doc.setXmlVersion("1.0");
doc = builder.parse(new InputSource(new
StringReader(responseLine)));
我之前也试过这个:
XMLInputFactory f = XMLInputFactory.newInstance();
XMLStreamReader r;
try {
r = f.createXMLStreamReader(new StringReader(responseLine));
int eventType = r.next();
while(r.hasNext()) {
r.require(XMLStreamReader.START_ELEMENT, null,
"TagName");
if(eventType == XMLStreamConstants.END_ELEMENT){
break;
}
//EventName = r.getName();
if(eventType == XMLStreamConstants.CHARACTERS
|| eventType == XMLStreamConstants.CDATA
|| eventType == XMLStreamConstants.SPACE
|| eventType == XMLStreamConstants.ENTITY_REFERENCE) {
serverResponse.append(r.getText());
}
r.nextTag();
eventType = r.nextTag();
}
} catch (XMLStreamException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我在这里缺少什么吗?正如我所说,我对此完全陌生,所以如果你回应,请不要假设我知道任何事情。
解决方案
我想通了。这就是我所做的 - 它有效,但如果有更好的方法 - 让我知道。
XML 流如下所示:
<loads>
<load date="" groupsplitting="allowed" sequencemaxlookahead="0"
usesequenceovercontainers="true" containerselectionrule="7"
numstagingpositions="0" loadproportionally="false"
sequenceiscontainertype="false" customerid="" stage="1" userint1="0"
userstring2="" userstring1="" shipdate="" notes=""
loadid="2000151290:01001072269" id="2000151290:01001072269"/>
</loads>
serverResponse.append(responseLine);
DocumentBuilder builder =
DocumentBuilderFactory.newInstance().newDocumentBuilder();
doc = builder.parse(new InputSource(new StringReader(responseLine)));
doc.getDocumentElement().normalize();
doc.getDocumentElement().getNodeName();
Element rootElement = doc.getDocumentElement();
NodeList sElement = doc.getElementsByTagName("load");
for (int i = 0; i < sElement.getLength(); i++) {
Element node = (Element)sElement.item(i);
NamedNodeMap attributes = node.getAttributes();
for (int i2 = 0; i2 < attributes.getLength(); i2++) {
Attr attr = (Attr) attributes.item(i2);
if(attr.getNodeName() == "loadid"){
Delivery = attr.getNodeValue();
}
}
}
推荐阅读
- html - Carousel Bootstrap 不能用作幻灯片
- java - 将 Java Spark Sql 连接到 Mysql
- amazon-web-services - 你能指导我有关专用 AWS 的信息吗?
- python - 让 dev_appserver.py 监听变化
- python-3.x - python中列表理解输出的问题
- ubuntu - udev 规则问题 - 在 ubuntu 20.04 上安装 STMicroelectronics STlink 工具
- c++ - 如何提高大整数的乘法效率?
- python-3.x - 嵌入狙击消息显示用户ID而不是用户名discord bot python
- python - 在 Python 中将 OpenCV 图像保存到外部服务器路径中
- javascript - ImportXML - Javascript?导入的内容为空