![](/img/trans.png)
[英]How to post data to javascript using org.w3c.dom.Document
[英]Convert XML string to org.w3c.dom.Document?
我有以下XML字符串,我想将此字符串转换为org.w3c.dom.Document以获得“ CallPaySecureResult”元素的值。
<?xml version="1.0" encoding="UTF-8"?>
<S:Body xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<ns2:CallPaySecureResponse xmlns:ns2="https://paysecure/merchant.soap/">
<CallPaySecureResult>&lt;status&gt;success&lt;/status&gt;&lt;errorcode&gt;0&lt;/errorcode&gt;&lt;errormsg /&gt;&lt;guid&gt;d785f819-6fc1-1c68-8edf-bbb65cba5412&lt;/guid&gt;&lt;/paysecure&gt;</CallPaySecureResult>
</ns2:CallPaySecureResponse>
</S:Body>
我尝试了以下代码
public String processIssuerResultParameters(String strXML)throws Exception
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
Document doc=null;
String CallPaySecureResult ="";
try
{
builder = factory.newDocumentBuilder();
doc = builder.parse( new InputSource( new StringReader( strXML ) ) );
logger.severe(doc.getTextContent());
} catch (Exception e) {
return "1:"+e.toString()+doc.getTextContent();
}
}
我已经试过了:
InputSource is= new InputSource(new StringReader(strXML));
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
builder = null;
builder = factory.newDocumentBuilder();
doc = builder.parse(is);
和这个 :
Source source = new StreamSource(new StringReader(strXML));
DOMResult result = new DOMResult();
TransformerFactory.newInstance().newTransformer().transform(source , result);
doc = (Document) result.getNode();
但是在所有情况下,变量“ doc”为空。
如何将XML(string)解析为Document并在<CallPaySecureResult>
获取值?
以下是一些示例+上下文。
您应该查看整个文件: https : //github.com/bcdev/ceres/blob/master/ceres-metadata/src/main/java/com/bc/ceres/metadata/XPathHandler.java#L76
private static Document transformToDocument(Object document) {
try {
String docString;
if (document instanceof ReaderResource) {
docString = ((ReaderResource) document).getContent();
} else if (document instanceof String) {
docString = (String) document;
} else if (document instanceof Element) { //used?
DOMSource domSource = new DOMSource((Element) document);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
Properties properties = new Properties();
properties.setProperty(OutputKeys.METHOD, "xml");
properties.setProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.setOutputProperties(properties);
transformer.transform(domSource, result);
docString = writer.toString();
} else {
return null;
}
InputStream is = new ByteArrayInputStream(docString.getBytes());
return DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
这可能对您有帮助:
public class Convert {
public static void main(String[] args) {
Document copyBookXml = XmlUtils.fileToDom(args[1]);
Document sourceDocument = XmlUtils.fileToDom(args[0]);
// params 1) XML source document 2) Copybook as XML
String result = new XmlToMainframe().convert(sourceDocument, copyBookXml);
FileUtils.writeFile(result, "mfresult.txt", false);
}
}
完整代码在这里(code.openhub.net):
尝试获取元素时,需要使用名称空间,以下是工作代码:
private static String input =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+"<S:Body xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\">"
+"<ns2:CallPaySecureResponse xmlns:ns2=\"https://paysecure/merchant.soap/\">"
+"<CallPaySecureResult>&lt;status&gt;success&lt;/status&gt;&lt;errorcode&gt;0&lt;/errorcode&gt;&lt;errormsg /&gt;&lt;guid&gt;d785f819-6fc1-1c68-8edf-bbb65cba5412&lt;/guid&gt;&lt;/paysecure&gt;</CallPaySecureResult>"
+"</ns2:CallPaySecureResponse>"
+"</S:Body>";
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
docFactory.setNamespaceAware(true);
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
InputSource is= new InputSource(new StringReader(input));
Document doc = docBuilder.parse(is);
String docNS = "https://paysecure/merchant.soap/";
NodeList nl = doc.getElementsByTagNameNS(docNS, "CallPaySecureResponse");
String s = nl.getLength()> 0 ?nl.item(0).getTextContent():"ELEMENT NOT FOUND";
System.out.println(s);
输出:
<status>success</status><errorcode>0</errorcode><errormsg /><guid>d785f819-6fc1-1c68-8edf-bbb65cba5412</guid></paysecure>
希望对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.