如何从SOAP响应中获取XML元素的值

如何从SOAP响应中获取XML元素的值,第1张

首先根据用户认证系统的webservice服务生成客户端,在页面里用客户端发送请求,然后接收请求。 也可以直接用soap框架来发送和接收soap消息,这样需要你了解一下soap消息相关的知识。了解之后,自己构造soap消息发送、解析返回的soap消息。

C# *** 作XML 有以下几种方式:

1:使用XmlDocument相关类库和方法 *** 作xml

2:使用XDocument相关类库和方法 *** 作xml

3:使用XmlReader和XmlWriter相关类库和方法 *** 作xml

获得指定节点的值也需要 分为属性和元素

1:使用XmlDocument

XmlDocument doc = new XmlDocument();

docLoad("Customer2xml");

// XmlNodeList nodeList = docGetElementsByTagName("row");

XmlNodeList nodeList = docSelectNodes("/Table/row");

//读取属性+元素

foreach (XmlNode item in nodeList)

{

customerInfoAppId = itemAttributes["AppID"]Value;

customerInfoCustomerID = item["CustomerID"]InnerText;

}

2:使用XDocument

XDocument xdoc = XDocumentLoad("Customer2xml");

var custs = from customer in xdocDescendants("row")

select new

{//读取属性+元素

Version = customerAttribute("Version")Value,

CustomerID = customerElement("CustomerID")Value,

};

3:使用XmlReader

XmlReader reader = XmlReaderCreate("Customer2xml", settings);

//读取属性

while (readerRead())

{

if (readerNodeType == XmlNodeTypeElement)

{

switch (readerName)

{

case "row":

customerInfo = new CustomerInfo();

if (readerHasAttributes)

{

customerInfoAppId = readerGetAttribute("AppID");

customerInfoVersion = readerGetAttribute("Version");

}

break;

case "CustomerID":

customerInfoCustomerID = readerReadString();

break;

}

}

可以通过元素中的getText方法获取到节点的内容。

举例:

SAXReader sax = new SAXReader();

Document document = saxread(reader);//reader为定义的一个字符串,可以转换为xml

Element root = documentgetRootElement();//获取到根节点元素String str = root getText()//获取到节点的内容

用到的是dom4j-161jar,需要引入的包是:

import orgdom4jDocument;

import orgdom4jDocumentException;

import orgdom4jElement;

import orgdom4jioSAXReader;

备注:如果是多个子节点可以通过”Element xx=root element("code")“获取到子节点的元素,前提是需要知道子节点的名称。

java中获取xml节点元素值 根据不同的处理xml方式不同而不同。

java中解析xml的方式:大体可以使用以下四种

------------------------------------------------------------

DOM(Document Object Model)

为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,

然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来 *** 作这个树结构。

优点:整个文档树在内存中,便于 *** 作;支持删除、修改、重新排列等多种功能;

缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;

使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)

SAX(Simple API for XML)

为解决DOM的问题,出现了SAX。SAX ,事件驱动。

当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,

程序员编写响应这些事件的代码,保存数据。优点:不用事先调入整个文档,占用资源少;

SAX解析器代码比DOM解析器代码小,适于Applet,下载。

缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;

从事件中只能得到文本,但不知该文本属于哪个元素;

使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少;

DOM4J

DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,

同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,

特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J

JDOM

为减少DOM、SAX的编码量,出现了JDOM;优点:20-80原则,极大减少了代码量。

使用场合:要实现的功能简单,如解析、创建等,但在底层,JDOM还是使用SAX(最常用)、DOM、Xanan文档。

------------------------------

参考代码

dom4j

------------------------------

import orgdom4jDocument;

import orgdom4jDocumentException;

import orgdom4jDocumentHelper;

import orgdom4jElement;

import orgdom4jioSAXReader;

import orgdom4jioXMLWriter;

---------------------------------------------

File f = new File("studentsxml");

SAXReader reader = new SAXReader();

Document doc = readerread(f);

Element root = docgetRootElement();

for (Iterator iter = rootelementIterator(); iterhasNext();) {

Element element = (Element) iternext();

// Systemoutprintln(elementattributeValue("email"));

String ids=elementelementText("stuId");

Systemoutprintln(ids);

String names=elementelementText("stuName");

Systemoutprintln(names);

String ages=elementelementText("age");

Systemoutprintln(ages);

}

------------------------------------

dom 方式

---------------

import javaxxmlparsers;

import javaxxmltransform;

import javaxxmltransformdomDOMSource;

import javaxxmltransformstreamStreamResult;

------------------------

DocumentBuilderFactory factory = DocumentBuilderFactorynewInstance();

// 允许名字空间

// factorysetNamespaceAware(true);

// 允许验证

// factorysetValidating(true);

// 获得DocumentBuilder的一个实例

DocumentBuilder builder = null;

try {

builder = factorynewDocumentBuilder();

} catch (ParserConfigurationException pce) {

Systemerrprintln(pce);

// 出异常时输出异常信息,然后退出,下同

Systemexit(1);

}

Document doc = null;

// 解析文档,并获得一个Document实例。

try {

try {

// InputStream is=new FileInputStream("studentsxml");

doc = builderparse("studentsxml");

// doc = builderparse(is);

} catch (SAXException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

} catch (DOMException dom) {

Systemerrprintln(domgetMessage());

Systemexit(1);

} catch (IOException ioe) {

Systemerrprintln(ioe);

// Systemexit(1);

}

for (int i = 0; i < nlStudentgetLength(); i++) {

Element elmtStudent = (Element) nlStudentitem(i);

String email = elmtStudentgetAttribute("email");

Systemoutprintln(email);

NodeList ids = elmtStudentgetElementsByTagName("stuId");

Element id = (Element)idsitem(0);

Node tId = idgetFirstChild();

Systemoutprintln(tIdgetNodeValue());

NodeList names = elmtStudentgetElementsByTagName("stuName");

Element e = (Element)namesitem(0);

Node tName = egetFirstChild();

Systemoutprintln(tNamegetNodeValue());

}

第一种:使用XPath

XML的路径我配置在webconfig

的appSettings节点下

Hashtable ht = new Hashtable();

string orgCodePath = ServerMapPath(ConfigurationSettingsAppSettings["orgCodePath"]);

//string orgCodePath = ServerMapPath("//template/home/orgCodexml");

XmlDocument xmldoc = new XmlDocument();

xmldocLoad(orgCodePath);

//获取节点列表

XmlNodeList topM = xmldocSelectNodes("//Organization");

foreach (XmlElement element in topM)

{

string id = elementGetElementsByTagName("ID")[0]InnerText;

string domainName = elementGetElementsByTagName("DomainName")[0]InnerText;

htAdd(id, domainName);

}

第二种:遍历式读取XML

//打开某文件(假设webconfig在根目录中)

string filename=ServerMapPath("/") + @"WebApplication1/webconfig";

XmlDocument xmldoc= new XmlDocument();

xmldocLoad(filename);

//得到顶层节点列表

XmlNodeList topM=xmldocDocumentElementChildNodes;

foreach(XmlElement element in topM)

{

if(elementNameToLower()=="appsettings")

{

//得到该节点的子节点

XmlNodeList nodelist=elementChildNodes;

if ( nodelistCount >0 )

{

//DropDownList1ItemsClear();

foreach(XmlElement el in nodelist)//读元素值

{

//DropDownList1ItemsAdd(elAttributes["key"]InnerXml);

//thisTextBox2Text=elAttributes["key"]InnerText;

thisTextBox2Text=elAttributes["key"]Value;

thisLabel1Text=elAttributes["value"]Value;

//同样在这里可以修改元素值,在后面save。

// elAttributes["value"]Value=thisTextBox2Text;

}

}

}

}

xmldocSave(filename);

读取xml任意节点

XmlNode node=docSelectSingleNode("/configuration/appSettings/add"); //按照节点目录查询

if(node!=null)

{

string k=nodeAttributes["key"]Value;

string v=nodeAttributes["value"]Value;

node=null;

}

XmlNode node=docSelectSingleNode("/configuration/appSettings/add");

if(node!=null)

{

XmlNodeReader nr=new XmlNodeReader(node);

nrMoveToContent();

//检查当前节点是否是内容节点。如果此节点不是内容节点,则读取器向前跳至下一个内容节点或文件结尾。

nrMoveToAttribute("value");

string s=nrValue;

node=null;

}

以上就是关于如何从SOAP响应中获取XML元素的值全部的内容,包括:如何从SOAP响应中获取XML元素的值、C# *** 作XML,如何获取指定节点值、怎么获取xml指定节点的内容等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9650042.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存