У меня есть два подхода для решения вашей проблемы
, вы можете использовать любой способ, какой захотите
Метод 1:
Правильный синтаксический анализ Java xmls
Hear - это пример кода, где вы можете получить номер заказа из вашего 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
Таким образом, вы можете unescape xmls
String unescapedStr=StringEscapeUtils.unescapeXml(StringEscapeUtils.unescapeXml(str)));//you can store it in a file if you want
Я сделал unescapeXml twise
Метод 2:
Если вы нехотите отформатировать xml и хотите, чтобы в нем не было заказа. Существует простой способ добиться этого с помощью Regex
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;
}
. Вызовите метод следующим образом
System.out.println(Arrays.toString(getOrderNo(str).toArray()));
Вывод будет
[= "0NGAOR18100000000603"]
, так как вы использовали регулярное выражение, вы можете удалить ненужные скобки, используя замену строки, или вы можете использовать все еще эффективные регулярные выражения
Надеюсь, это поможетвы !!!!
Счастливое кодирование