gpt4 book ai didi

android - 如何解析存储在字符串变量中的 xml?我们从具有身份验证的 web 服务获得 xml 响应的地方?

转载 作者:太空宇宙 更新时间:2023-11-03 11:18:52 25 4
gpt4 key购买 nike

我不确定这是否是一个明确的问题。我想要的是从 web 服务检索 xml 响应。我有 url、用户名、密码、xml 主体等 web 服务的详细信息。我可以获得 xml 响应在字符串变量中。有人可以为我提供一个有用的链接来解析 xml 字符串吗?我正在共享用于检索 xml 的代码 注意:-确保你有 commons-httpclient-3.1,commons-codec-1.6,commons-logging-1.1.1,junit-4.10库

 import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.PostMethod;


public class AbstractService
{
@SuppressWarnings( "deprecation" )
protected String postForString( final String requestUrl, final String requestBody )
{
final StringBuilder result = new StringBuilder();
HttpClient client = new HttpClient();

try
{
PostMethod postRequest = new PostMethod( getAbsoluteUrl( requestUrl ) );

postRequest.addRequestHeader( WebServiceClientConstants.CONTENT_TYPE,
WebServiceClientConstants.APPLICATION_XML );
postRequest.setRequestBody( WebServiceClientConstants.REQUEST_HEADER + requestBody );

client.getState()
.setCredentials(
new AuthScope( WebServiceClientConstants.HOST, WebServiceClientConstants.PORT,
AuthScope.ANY_REALM ),
new UsernamePasswordCredentials( WebServiceClientConstants.USERNAME,
WebServiceClientConstants.PASSWORD ) );

int responseCode = client.executeMethod( postRequest );

System.out.println( "[REQUEST][" + postRequest.getURI().toString() + "]" );
System.out.println( "[STATUS][" + postRequest.getStatusLine().toString() + "]" );

if ( HttpStatus.SC_OK == responseCode )
{
String data = null;
final InputStream responseStream = postRequest.getResponseBodyAsStream();
final BufferedReader bufferedReader = new BufferedReader( new InputStreamReader( responseStream,
WebServiceClientConstants.UTF_8_ENCODING ) );

while ( ( data = bufferedReader.readLine() ) != null )
{
result.append( data );
}
}

postRequest.releaseConnection();

}
catch ( Exception e )
{
e.printStackTrace();
}

return result.toString();
}

private String getAbsoluteUrl( String requestUrl )
{
return WebServiceClientConstants.SERVIE_BASE_URL + requestUrl;
}
}

WebServiceClientConstants 接口(interface)

package com.test.service.info;
public interface WebServiceClientConstants
{
String PROTOCOL = "http://";
String HOST = "youraddress.blah.test.com";
Integer PORT = 8080;
String SERVIE_BASE_URL = "http://youraddress.blah.test.com:8080/test/seam/resource/Services/";
String USERNAME = "Username";
String PASSWORD = "password";
String REQUEST_HEADER = "<?xml version=\"1.0\"?>";
String CONTENT_TYPE = "Content-Type";
String APPLICATION_XML = "application/xml";
String UTF_8_ENCODING = "UTF-8";
}

菜单服务接口(interface)

public interface MenuService
{
String getMenu();
}

MenuServiceImpl.java

public class MenuServiceImpl extends AbstractService implements MenuService
{
@Override
public String getMenu()
{
String requestUrl = "getMenu";
String requestBody = "<ServiceRequest>" + "<ShortName>AppName</ShortName>"
+ "</ServiceRequest>";

return postForString( requestUrl, requestBody );
}
}

然后在一些 Activity 中写

 MenuService menuService = new MenuServiceImpl();
String prMenu = menuService.getMenu();
Assert.assertNotNull( prMenu );

test.setText(prMenu);

现在我将 xml 响应存储在 prMenu 变量中。它看起来像这样 http://www.coders-global.com/works/dev/menuserivicetemp.xml.Now我如何解析这个 Xml 字符串。请看一下链接。它看起来很复杂,我之前曾在其他线程中询问过如何解析此链接,但回复没有太大帮助。如果有任何有用的链接或建议,请告诉。

最佳答案

您的问题似乎是“我如何解析存储在内存中的 XML 内容”,因为您似乎能够从远程服务器正确获取数据。

本质上,Java 库中内置了两个工具,分别称为 SAX 和 DOM 解析器。这两个选项的工作方式截然不同,您了解其中的差异并在它们之间做出明智的选择非常重要。

这里是在android XML Parsing Tutorial中使用DOM解析器的例子鉴于数据量较小,这可能是您想要采取的方向。

PS:从性能的角度来看,同样使用 String.append 是非常糟糕的 - 您需要查看针对此类任务优化的 stringbuilder 类。

关于android - 如何解析存储在字符串变量中的 xml?我们从具有身份验证的 web 服务获得 xml 响应的地方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12247546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com