2015-11-01 2 views
1

У меня есть строка, в которой есть xml. Я хотел бы удалить все повторяющиеся повторяющиеся теги в ней с помощью java. Вот результат я получаюJava - удалить повторяющиеся повторяющиеся теги в строке java

<?xml version="1.0" encoding="UTF-8"?> 
<Student> 
    <Student> 
     <Name>Clark Kent</Name> 
     <ID>555-12-3456</ID> 
     <AssignedWork> 
      <AssignedWork> 
       <category>Exams</category> 
       <GradedWork> 
        <GradedWork> 
         <Name>Mid Term</Name> 
         <Grade>20</Grade> 
        </GradedWork> 
        <GradedWork> 
         <Name>Final</Name> 
         <Grade>80</Grade> 
        </GradedWork> 
       </GradedWork> 
      </AssignedWork> 
     <AssignedWork> 
    </Student> 
</Student> 

Я хотел бы, чтобы удалить один экземпляр <Student>,</Student>,and <AssignedWord> но не<Name>, потому что это не cosecutive. Как мне это сделать в java?

Я пробовал нижеследующий, но он также удалит <Name>.

String opstring = new LinkedHashSet<String>(Arrays.asList(xmlString.split(">"))).toString().replaceAll("(^\\[|\\]$)", "").replace(", ", ">"); 

ответ

1

В вашем примере нет тега, указанного в вашем объяснении, и я предполагаю, что второй тег не закрыт по ошибке.

Следующий код использует LinkedList. Не уверен, что вы ищете однострочный.

String[] elements = xml.split("<"); 
LinkedList<String> ll = new LinkedList<String>(); 
for (String str : elements) { 
    if (str.isEmpty()) 
     continue; 
    str = str.trim(); 
    if (ll.isEmpty()) { 
     ll.add(str); 
     continue; 
    } 
    if (!ll.peekLast().equals(str)) { 
     ll.add(str); 
    } 
} 
while (!ll.isEmpty()) { 
    System.out.println("<" + ll.pollFirst()); 
} 
+0

блестящий ..thnks – TheLion

0

Вот такой подход. Я думаю, вы можете удалить повторяющуюся повторяющуюся строку. Передайте все строки в массиве String []. Возьмите все теги для ex: < name> как токен в массиве String, а затем вы можете передать весь токен в HashMap в качестве ключа, а затем отфильтровать его с помощью своего требования и удалить его. Попробуйте один раз.

Смежные вопросы