Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自JavaREST服务响应的XML解析_Java_Xml_Jakarta Ee_Xml Parsing_Joox_Gradle - Fatal编程技术网

来自JavaREST服务响应的XML解析

来自JavaREST服务响应的XML解析,java,xml,jakarta-ee,xml-parsing,joox,gradle,Java,Xml,Jakarta Ee,Xml Parsing,Joox,Gradle,我从Java Rest服务获得以下XML响应。有人能告诉我如何获取状态标记信息吗 <operation name="EDIT_REQUEST"> <result> <status>Failed</status> <message>Error when editing request details - Request Closing Rule Violation. Request cannot be Resolved</messa

我从Java Rest服务获得以下XML响应。有人能告诉我如何获取状态标记信息吗

<operation name="EDIT_REQUEST">
<result>
<status>Failed</status>
<message>Error when editing request details - Request Closing Rule Violation. Request cannot be Resolved</message>
</result>
</operation>

失败
编辑请求详细信息时出错-请求关闭规则冲突。请求无法解决
这里有一个粗略的代码

    ByteArrayInputStream input =  new ByteArrayInputStream(
            response.getBytes("UTF-8"));

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document doc = builder.parse(input);

    // first get root tag and than result tag and childs of result tag
    NodeList childNodes = doc.getDocumentElement().getChildNodes().item(0).getChildNodes();
    for(int i = 0 ; i < childNodes.getLength(); i++){
        if("status".equals(childNodes.item(i).getNodeName())){
            System.out.println(childNodes.item(i).getTextContent());
        }
    } 
ByteArrayInputStream输入=新建ByteArrayInputStream(
getBytes(“UTF-8”);
DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance();
DocumentBuilder=factory.newDocumentBuilder();
文档doc=builder.parse(输入);
//首先获取根标记,然后获取结果标记和结果标记的child
NodeList childNodes=doc.getDocumentElement().getChildNodes().item(0.getChildNodes();
对于(int i=0;i
一个选项是使用库,使用导入,如:

然后像这样使用它:

import org.xml.sax.SAXException;
import java.io.File;
import java.io.IOException;
import static org.joox.JOOX.$;

public class Main {

    public static void main(String[] args) throws IOException, SAXException {
        System.out.println(
                $(new File(args[0])).xpath("/operation/result/status").text()
        );
    }
}
它产生:

Failed

如果您只是关心状态文本,那么就用一个简单的正则表达式和一个组怎么样

e、 g

String responseXml='xml服务响应….'
Pattern p=Pattern.compile(“(.+?)”);
Matcher m=p.Matcher(responseXml);
if(m.find())
{
System.out.println(m.group(1));//应打印“失败”
}

XPath
是一种非常健壮和直观的快速查询XML文档的方法。您可以通过以下步骤达到
status
标记的值

   DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
   documentBuilderFactory.setNamespaceAware(true);
   DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
   Document doc = builder.parse(stream); //input stream of response.

   XPathFactory xPathFactory = XPathFactory.newInstance();
   XPath xpath = xPathFactory.newXPath();

   XPathExpression expr = xpath.compile("//status"); // Look for status tag value.
   String status =  expr.evaluate(doc);
   System.out.println(status);

这是一个普通的xml解析问题,您尝试过什么吗?请看:您可以从搜索“如何在Java中解析xml”开始,您的问题确实缺乏一些研究工作。这不是一个gradle问题,也没有理由增加第三方库的负担来做一些可以在常规Java SE中轻松完成的事情。
String responseXml = 'xml response from service....'

Pattern p = Pattern.compile("<status>(.+?)</status>");
Matcher m = p.matcher(responseXml);

if(m.find())
{
   System.out.println(m.group(1)); //Should print 'Failed'
}
   DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
   documentBuilderFactory.setNamespaceAware(true);
   DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
   Document doc = builder.parse(stream); //input stream of response.

   XPathFactory xPathFactory = XPathFactory.newInstance();
   XPath xpath = xPathFactory.newXPath();

   XPathExpression expr = xpath.compile("//status"); // Look for status tag value.
   String status =  expr.evaluate(doc);
   System.out.println(status);