我有以下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(字符串)解析为Document并获取<CallPaySecureResult>
中的值?
答案 0 :(得分:1)
以下是一些示例+上下文。
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);
}
}
答案 1 :(得分:0)
这可能会对您有所帮助:
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):
答案 2 :(得分:0)
在尝试获取元素时需要使用命名空间,下面是工作代码:
Workbooks("ddWorkbook.xlsm").Worksheets("Daily Dashboard").Range("D23").MergeArea.Cells(1,1).Value
输出:
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);
希望这可以提供帮助。