2014-09-09 5 views
0

У меня есть XML, которые выглядят следующим образом:Как удалить < and > в XMLthat является частью сообщений XML

<StartTag> 
    <MyValueTag>And the value itself contains a < bracket that makes the XML invalid</MyValueTag> 
</StartTag> 

XML-содержащий «<» характера, что делает XML недействителен.

Теперь самый простой способ - исправить источник XML, но, к сожалению, у меня нет контроля над созданием XML. Он имеет такие сообщения, как «Значение <, чем 10», предположительно «меньше».

В любом случае, как я могу проверить XML для таких вещей и избежать этих символов?

Я пробовал Looking at this post, где парень указал, что мы должны использовать JTidy. Но когда я попробовал это не снимает <:

Tidy tidy = new Tidy(); 
tidy.setInputEncoding("UTF-8"); 
tidy.setOutputEncoding("UTF-8"); 
tidy.setWraplen(Integer.MAX_VALUE); 
tidy.setPrintBodyOnly(true); 
tidy.setXmlOut(true); 
tidy.setSmartIndent(true); 
ByteArrayInputStream inputStream = new ByteArrayInputStream(data.getBytes("UTF-8")); 
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
tidy.parseDOM(inputStream, outputStream); 

ответ

2

Тот факт, что XML является недействительным означает, что вы не собираетесь быть в состоянии использовать правильный XML-парсер, чтобы прочитать его и исправить ее. Если вы не можете заставить авторов программного обеспечения, которые пишут файл, исправить ошибку, тогда вам придется придумать какое-то конкретное решение для конкретного приложения.

Например, если бы вы знали, что паразитная < символ происходит только в тексте <MyValue> элемента, и если бы вы знали, что никакие другие элементы не могли бы произойти дети <MyValue>, то это было бы довольно легко написать программу который распознает начальный и конечный теги и заменяет любые < символов, которые встречаются между ними: &#60;

Конечно, если проблема не такая простая, то решение будет не таким простым; но, надеюсь, вы можете сделать это проще, чем решить общую проблему для XML.

После того, как вы исправили несколько файлов «вручную», остановитесь и спросите себя: «Как я узнал, что нужно было убрать символ <?» Затем напишите программу, которая работает с теми же знаниями.