2 回答

TA貢獻1818條經(jīng)驗 獲得超11個贊
我有兩種方法可以解決您的問題
你可以使用任何你想要的方式
方法一:
Java正確解析xmls
聽到是一個代碼示例,您可以在其中從您的 xml 中獲取訂單號
String filepath = "/home/sample.xml"; //this file contains unecaped xml
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document xmlDoc = docBuilder.parse(filepath);
Node Order = xmlDoc.getElementsByTagName("Order").item(0);
NamedNodeMap attr = Order.getAttributes();
Node no = attr.getNamedItem("No");
System.out.println("Order no : " + no.getNodeValue());
此代碼的輸出
訂單號:0NGAOR18100000000603
這樣你就可以對 xmls 進行轉(zhuǎn)義
String unescapedStr=StringEscapeUtils.unescapeXml(StringEscapeUtils.unescapeXml(str)));//you can store it in a file if you want
我已經(jīng)完成了 unescapeXml twise
方法二:
如果您不想格式化 xml 并希望從中獲得訂單號 使用 Regex 有一種簡單的方法可以實現(xiàn)它
private static final Pattern TAG_REGEX = Pattern.compile("Order No(.+?) ");
private static List<String> getOrderNo(final String str) {
final List<String> tagValues = new ArrayList<String>();
final Matcher matcher = TAG_REGEX.matcher(str);
while (matcher.find()) {
tagValues.add(matcher.group(1));
}
return tagValues;
}
以這種方式調(diào)用方法
System.out.println(Arrays.toString(getOrderNo(str).toArray()));
輸出我們會
[="0NGAOR18100000000603"]
由于您使用了正則表達式,您可以使用字符串替換刪除不需要的括號,或者您可以使用仍然有效的正則表達式
希望這對你有幫助?。。。?/p>

TA貢獻1848條經(jīng)驗 獲得超2個贊
首先嘗試從 SOAP 消息中提取消息正文。然后運行您的代碼以對其進行轉(zhuǎn)義并處理其內(nèi)容。
// create message factory
MessageFactory mf = MessageFactory.newInstance();
// headers for a SOAP message
MimeHeaders header = new MimeHeaders();
header.addHeader("Content-Type", "text/xml");
InputStream stream = new ByteArrayInputStream(responseXml .getBytes(StandardCharsets.UTF_8));
// create the SOAPMessage
SOAPMessage soapMessage = mf.createMessage(header,stream);
// get the body
SOAPBody soapBody = soapMessage.getSOAPBody();
添加回答
舉報