开发者

XML parsing Document.parse Excepting a name error

开发者 https://www.devze.com 2023-04-12 22:37 出处:网络
Hy, I\'ve got some problem with my xml parser again :D I parse a string with org.w3c.dom.Document He code:

Hy, I've got some problem with my xml parser again :D

I parse a string with org.w3c.dom.Document He code:

String str = new String(IOUtilities.streamToBytes(is), "UTF-8");
InputSource source = new InputSource();
source.setCharacterStream(new StringReader(str));
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setCoalescing(true);
dbf.setAllowUndefinedNamespaces(true);
DocumentBuilder db;
Document doc = null;

db = dbf.newDocumentBuilder();
开发者_如何学编程doc = db.parse(source); // ERROR here
doc.getDocumentElement().normalize();

But I get an Error message: Expecting a name

The String (reformatted to be readable):

<?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>
    <soap:Fault>
      <faultcode>soap:Server</faultcode>
      <faultstring>Server was unable to process request. ---&gt; Invalid Username or password</faultstring>
      <detail />
    </soap:Fault>
  </soap:Body>
</soap:Envelope>


Try this

DocumentBuilderFactory factory1 = DocumentBuilderFactory.newInstance();

DocumentBuilder builder1 = factory1.newDocumentBuilder();

XMLDOMUtil xm1 = new XMLDOMUtil();

ByteArrayInputStream bis = new ByteArrayInputStream(res.getBytes("UTF-8"));

Document document = builder1.parse(bis);

Node root = xm1.getNodeByTag(document, "soap:Envelope");

Node nextroot= xm1.getNodeByTag(root,"soap:Body");

Node nextroot1= xm1.getNodeByTag(nextroot,"soap:Fault");

String faultstring= xm1.getNodeTextByTag(nextroot1,"faultstring");

XMLDOMUtil class is given below-

import org.w3c.dom.Node;
import org.w3c.dom.Text;

public class XMLDOMUtil {



// go thru the list of childs and find the text associated by the tag
public String getNodeTextByTag(Node parentNode, String name) {

    Node node = parentNode.getFirstChild();
    Text text = null;
    String retStr = null;

    try {
        while (node != null) {
            if (node.getNodeName().equals(name)) {
                text = (Text) node.getFirstChild();
                retStr = text.getData();
                break;
            }
            node = node.getNextSibling();
        }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return retStr;
}

public Node getNodeByTag(Node parentNode, String name) {

    Node node = parentNode.getFirstChild();
    Node retNode = null;

    while (node != null) {
        if (node.getNodeName().equals(name)) {
            retNode = node;
            break;
        }
        node = node.getNextSibling();
    }
    return retNode;
}

public Node getNextSiblingNodeByTag(Node siblingNode, String name) {

    Node retNode = null;

    siblingNode = siblingNode.getNextSibling();

    while (siblingNode != null) {
        if (siblingNode.getNodeName().equals(name)) {
            retNode = siblingNode;
            break;
        }
        siblingNode = siblingNode.getNextSibling();
    }
    return retNode;
}

}
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号