Java разделяет строку xml, содержащую несколько файлов xml, сохраняя шаблон
В настоящее время я работаю со строкой XML (все данные XML хранятся в строке XML), которая состоит из нескольких файлов XML в этом формате:
<?xml version="1.0" encoding="UTF-8"?>
<File xml:space="preserve">
<Subfile keyword="Store" tag="0">
<Value number="1">Amazon</Value>
</Subfile>
<Subfile keyword="Owner" tag="1">
<Value number="1">Alice Murphy</Value>
</Subfile>
<Subfile keyword="Date" tag="2">
<Value number="1">20161114</Value>
</Subfile>
</File>
<?xml version="1.0" encoding="UTF-8"?>
<File xml:space="preserve">
<Subfile keyword="Store" tag="0">
<Value number="1">Walmart</Value>
</Subfile>
<Subfile keyword="Owner" tag="1">
<Value number="1">Eliza Calvin</Value>
</Subfile>
<Subfile keyword="Date" tag="2">
<Value number="1">20161130</Value>
</Subfile>
</File>
...
Я хочу разделить эту строку XML с помощью String.split() на основе тега XML.
Я также хочу, чтобы результирующие элементы массива сохранили тег xml, который действует как разделитель.
Код, который я использовал, был
String[] xmls = xmlString.split("(?=<?xml version=\"1.0\" encoding=\"UTF-8\"?>)");
Однако ничего не случилось, когда я это сделал. Что я здесь не так делаю?
Спасибо за помощь!
1 ответ
Вам просто нужно убежать от ?
персонаж, добавив \\
перед этим. Это происходит для всех специальных символов, которые имеют некоторое значение в регулярном выражении. Так что вам нужно иметь \\
в качестве префикса, когда вы хотите использовать специальные символы в качестве простых строковых символов.
Следующий фрагмент кода работает.
String separator = "(?=<\\?xml version=\"1.0\" encoding=\"UTF-8\"\\?>)";
String[] xmls = xmlString.split(separator);
for (String xml : xmls) {
System.out.println(xml);
System.out.println("-----------------------------------");
}
Это печатает:
<?xml version="1.0" encoding="UTF-8"?>
<File xml:space="preserve">
<Subfile keyword="Store" tag="0">
<Value number="1">Amazon</Value>
</Subfile>
<Subfile keyword="Owner" tag="1">
<Value number="1">Alice Murphy</Value>
</Subfile>
<Subfile keyword="Date" tag="2">
<Value number="1">20161114</Value>
</Subfile>
</File>
-----------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<File xml:space="preserve">
<Subfile keyword="Store" tag="0">
<Value number="1">Walmart</Value>
</Subfile>
<Subfile keyword="Owner" tag="1">
<Value number="1">Eliza Calvin</Value>
</Subfile>
<Subfile keyword="Date" tag="2">
<Value number="1">20161130</Value>
</Subfile>
</File>
-----------------------------------
Редактировать: .
следует избегать следующим образом.
String separator = "(?=<\\?xml version=\"1\\.0\" encoding=\"UTF-8\"\\?>)";
Спасибо @shmosel за указание на это.