gpt4 book ai didi

Java - 将 Web 服务响应 (StreamResult) 转换为 XML 以检索子值

转载 作者:行者123 更新时间:2023-12-02 12:46:02 26 4
gpt4 key购买 nike

我的代码是这样完成的:

        TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
Source sourceContent = soapResponse.getSOAPPart().getContent();
System.out.print("\nResponse SOAP Message = ");
StreamResult result = new StreamResult(System.out);
transformer.transform(sourceContent, result);

它在控制台中有这个输出(结果在一个输出行中,但我将像漂亮的 xml 一样复制粘贴它,只是为了更清楚)。

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<VerifyEmailResponse xmlns="http://ws.cdyne.com/">
<VerifyEmailResult>
<ResponseText>Mail Server will accept email</ResponseText>
<ResponseCode>3</ResponseCode>
<LastMailServer>gmail-smtp-in.l.google.com</LastMailServer>
<GoodEmail>true</GoodEmail>
</VerifyEmailResult>
</VerifyEmailResponse>
</soap:Body>
</soap:Envelope>

所以这完全可以正常工作。现在,如果我只想拥有 ResponseText 或 ResponseCode 值并将它们放入某些字段中,我该如何将此结果处理为 XML 以及如何获取该 XML 元素?

我也看了这个问题Convert StreamResult to string or xml但我没有看到与我的问题的关系,因为我的类代码中已经有来自 ANSWER 的代码,但我无法处理结果(将其作为 XML 进行处理,我可以另外处理)如果我添加只是

StringWriter writer = new StringWriter();
String resultString2=writer.toString();

我没有引用已经有输出的 RESULT 变量。

我也尝试过:

result.getOutputStream().toString();

但结果是

java.io.PrintStream@3b9a45b3

result.toString(); 也没有给我想要的结果

如何将此输出获取到 XML 元素,以便我可以从中检索和获取特定的 XML 元素?

提前谢谢您,

最佳答案

为了获得所需的元素,例如从输出字符串(xml)中获取 ResponseCode, ResponseText ,您可以使用以下内容:

因为您的 xml 有命名空间,所以 xpath 应该意识到这一点。因此,您可以使用 xpath.setNameSpaceContext(ns); 设置命名空间上下文,如下所示

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
Source sourceContent = soapResponse.getSOAPPart().getContent();
System.out.print("\nResponse SOAP Message = ");

StringWriter sw = new StringWriter();
transformer.transform( sourceContent, new StreamResult( sw ) );

InputSource inputSource = new InputSource( new StringReader( sw.toString() ) );
XPath xpath = XPathFactory.newInstance().newXPath();

javax.xml.namespace.NamespaceContext ns = new javax.xml.namespace.NamespaceContext()
{

@Override
public String getNamespaceURI(String prefix) {
if ( "soap".equals( prefix ) )
{
return "http://schemas.xmlsoap.org/soap/envelope/";
}
else if ( "xsi".equals( prefix ) )
{
return "http://www.w3.org/2001/XMLSchema-instance";
}
else if ( "xsd".equals( prefix ) )
{
return "http://www.w3.org/2001/XMLSchema";
}
else if ( "xml".equals( prefix ) )
{
return javax.xml.XMLConstants.XML_NS_URI;
}
else if( "responsens".equals( prefix ) )
{
return "http://ws.cdyne.com/";
}


return javax.xml.XMLConstants.NULL_NS_URI;

}

@Override
public String getPrefix(String namespaceURI) {
return null;
}

@Override
public Iterator<?> getPrefixes(String namespaceURI) {
return null;
}

};
xpath.setNamespaceContext(ns);
Object obj = xpath.evaluate("//responsens:ResponseText/text()", inputSource, XPathConstants.STRING );
if ( obj != null )
{
String responseText = obj.toString();
System.out.println("Response text : " + responseText);
}

inputSource = new InputSource( new StringReader( sw.toString() ) );
//To get Response code:
obj = xpath.evaluate("//responsens:ResponseCode/text()", inputSource, XPathConstants.STRING );
if ( obj != null )
{
String responseCode = obj.toString();
System.out.println("Response code : " + responseCode);
}

关于Java - 将 Web 服务响应 (StreamResult) 转换为 XML 以检索子值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44777897/

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