调用WebService获得基于SOAP的XML,怎么解析获得节点的属性和值?
我现在自己在做一个小的项目测试,然后现在客户端已经可以获得服务器传过来的XML的字符串消息。方法什么的都是自己写的。现在是要获得节点里面的属性名和属性值,因为要在一个APP中显示出来,我这个只是测试的一个JAVA程序。到时是要写到Android里面的。所以是要获取这些值。 但是今天试了两个方法都报错。这边是其中一种方法,报的错都一样,所以应该不是方法问题。
ByteArrayInputStream inputStream = new ByteArrayInputStream(r.getBytes());
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder db = factory.newDocumentBuilder();
org.w3c.dom.Document document = db.parse(inputStream);
NodeList node = document.getElementsByTagName("row");
for(int i = 0 ; i < node.getLength();i++){
org.jdom2.Element element = (Element)node.item(i);
String content = element.getAttributeValue("address");
System.out.println(content);
}
用的是这个方法。然后还有一种SAXReader的方法也试用过。 都是同样的报错:
Exception in thread "main" org.dom4j.DocumentException: Error on line 21 of document : 元素类型 "row" 必须后跟属性规范 ">" 或 "/>"。 Nested exception: 元素类型 "row" 必须后跟属性规范 ">" 或 "/>"。
错误信息有用的就这一行。 然后我的那个字符串,就是XML类型的字符串是以下内容:
<?xml version="1.0" encoding="GBK"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<soap:Header><out:system xmlns:out="http://www.xxx.com/">
</out:system></soap:Header>
<soap:Body>
<out:business xmlns:out="http://www.xxx.com/">
<result showtype="2"/>
<resultset name="structs">
<row label="医院编号" columnname="hospitalid" typename="Varchar2" />
<row label="地址" columnname="address" typename="Varchar2" />
<row label="可否预约" columnname="canappoint" typename="Varchar2" />
<row label="部门编号" columnname="deptcode" typename="Varchar2" />
<row label="医生" columnname="deptdoctors" typename="Varchar2" />
<row label="科室名称" columnname="outpatientofficename" typename="Varchar2" />
<row label="父级编号" columnname="parentId" typename="Varchar2" />
<row label="备注" columnname="remark" typename="Varchar2" />
</resultset>
<resultset name="retrieve"><row hospitalid="1"
address="外环路"
canappoint="1"
deptcode="1"
deptdoctors="李一"
outpatientofficename="外科"
parentId="0"
remark="测试"
/>
<row hospitalid="1"
address="外环路"
canappoint="1"
deptcode="2"
deptdoctors="王大陆"
outpatientofficename="骨科"
parentId="0"
remark="测试"
/>
</resultset>
</out:business>
</soap:Body>
</soap:Envelope>
错误信息里面说21行的row有错误,也就是这一块块的开始错误。帮忙看看吧。卡了挺久的了。这些就取了几个元素。
ByteArrayInputStream inputStream = new ByteArrayInputStream(r.getBytes());
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder db = factory.newDocumentBuilder();
org.w3c.dom.Document document = db.parse(inputStream);
NodeList node = document.getElementsByTagName("row");
for(int i = 0 ; i < node.getLength();i++){
org.jdom2.Element element = (Element)node.item(i);
String content = element.getAttributeValue("address");
System.out.println(content);
}
用的是这个方法。然后还有一种SAXReader的方法也试用过。 都是同样的报错:
Exception in thread "main" org.dom4j.DocumentException: Error on line 21 of document : 元素类型 "row" 必须后跟属性规范 ">" 或 "/>"。 Nested exception: 元素类型 "row" 必须后跟属性规范 ">" 或 "/>"。
错误信息有用的就这一行。 然后我的那个字符串,就是XML类型的字符串是以下内容:
<?xml version="1.0" encoding="GBK"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<soap:Header><out:system xmlns:out="http://www.xxx.com/">
</out:system></soap:Header>
<soap:Body>
<out:business xmlns:out="http://www.xxx.com/">
<result showtype="2"/>
<resultset name="structs">
<row label="医院编号" columnname="hospitalid" typename="Varchar2" />
<row label="地址" columnname="address" typename="Varchar2" />
<row label="可否预约" columnname="canappoint" typename="Varchar2" />
<row label="部门编号" columnname="deptcode" typename="Varchar2" />
<row label="医生" columnname="deptdoctors" typename="Varchar2" />
<row label="科室名称" columnname="outpatientofficename" typename="Varchar2" />
<row label="父级编号" columnname="parentId" typename="Varchar2" />
<row label="备注" columnname="remark" typename="Varchar2" />
</resultset>
<resultset name="retrieve"><row hospitalid="1"
address="外环路"
canappoint="1"
deptcode="1"
deptdoctors="李一"
outpatientofficename="外科"
parentId="0"
remark="测试"
/>
<row hospitalid="1"
address="外环路"
canappoint="1"
deptcode="2"
deptdoctors="王大陆"
outpatientofficename="骨科"
parentId="0"
remark="测试"
/>
</resultset>
</out:business>
</soap:Body>
</soap:Envelope>
错误信息里面说21行的row有错误,也就是这一块块的开始错误。帮忙看看吧。卡了挺久的了。这些就取了几个元素。
...全文
相关推荐
JAVA调用webservice并解析xml
SOAP是基于XML的协议,用于在Web服务之间传递结构化信息。它定义了消息格式、错误处理和协议绑定。
webservice、soap等接口调用参考
在标题和描述中提到的"webservice,soap调用",这是指使用SOAP协议来调用Web服务的过程。
使用WebService的方法返回xml格式的数据
XML文档由元素、属性、文本内容等组成,具有良好的可读性和可解析性,是跨平台、跨语言的数据交换标准。2.
客户端调用webservice方式一(soap请求)
**总结**客户端通过SOAP请求调用WebService是一种常见的跨平台通信方式,适用于各种编程语言。理解SOAP消息的结构和HTTP请求的原理,是进行此类通信的关键。
C# Soap调用WebService的实例
"C#调用SOAP WebService的实例展示了如何使用C#代码与SOAP协议进行交互,通过发送POST请求到指定的WebService地址并处理返回的响应数据。"在C#编程中,当我们需要与


