Prelude предоставляет две функции, на которые вы можете посмотреть:
span
:: (a -> Bool) -> [a] -> ([a], [a])
span , примененный к предикату p и списку xs, возвращает кортеж, в котором первый элемент - самый длинный префикс (возможно, пустой) из xs элементов, которые удовлетворяют p, а второй элемент - остаток списка.
break
:: (a -> Bool) -> [a] -> ([a], [a])
break, примененный к предикату p и списку xs, возвращает кортеж, где первый элемент - самый длинный префикс (возможно, пустой) из xs элементов которые не удовлетворяют p, и второй элемент является остатком списка.
blockquote>Вы можете использовать их, чтобы разбить список на две части:
- Самый длинный префикс
0
- Остаток.
Индекс , на который вы ссылаетесь , - это длина префикса плюс 1 (первый элемент оставшегося списка). Используя сопоставление с образцом, вы можете извлечь число по этому индексу и добавить соответствующее значение. Затем соберите все обратно в список:
addNext :: (Num a, Eq a) => [a] -> [a] addNext xs = case span (==0) xs of (ps, (q:q':qs)) -> ps ++ [q] ++ [fromIntegral (length ps) + q' + 1] ++ qs _ -> xs
Я нашел интересный список в Спецификации Xml: Согласно тому Списку его нежелательное для использования Символьного № 26 (Шестнадцатеричное число: #x1A).
Символам, определенным в следующих диапазонах, также препятствуют. Они - или управляющие символы или постоянно неопределенные символы Unicode
Посмотрите полные спектры.
Этот код заменяет весь недопустимый Xml Utf8 от Строки:
public String stripNonValidXMLCharacters(String in) {
StringBuffer out = new StringBuffer(); // Used to hold the output.
char current; // Used to reference the current character.
if (in == null || ("".equals(in))) return ""; // vacancy test.
for (int i = 0; i < in.length(); i++) {
current = in.charAt(i);
if ((current == 0x9) ||
(current == 0xA) ||
(current == 0xD) ||
((current >= 0x20) && (current <= 0xD7FF)) ||
((current >= 0xE000) && (current <= 0xFFFD)) ||
((current >= 0x10000) && (current <= 0x10FFFF)))
out.append(current);
}
return out.toString();
}
его взятый от Недопустимых Символов XML: когда допустимый UTF8 не означает допустимый XML
Но с этим у меня был тихий UTF-8 compatility проблема:
org.xml.sax.SAXParseException: Invalid byte 1 of 1-byte UTF-8 sequence
После чтения XML - возвращающий XML как UTF-8 от сервлета я просто испытал то, что происходит, если я установил Contenttype как это:
response.setContentType("text/xml;charset=utf-8");
И это работало....
Расширяемый язык разметки (XML) 1.0 говорит:
Символ амперсанда (и) и открывающая угловая скобка (<) не должен казаться в их литеральной форме, кроме тех случаев, когда используемым в качестве разделителей разметки, или в рамках комментария, инструкции по обработке или раздела CDATA. Если они необходимы в другом месте, их нужно оставить с помощью или ссылок цифрового символа или строк "и" и" <" соответственно. Правую угловую скобку (>) можно представить с помощью строки">", и, для совместимости, нужно оставить с помощью любого">" или символьная ссылка, когда появляется в строке"]]>" в содержании, когда та строка не отмечает конец раздела CDATA.
Можно пропустить кодирование при использовании CDATA:
<column num="1"><![CDATA[10069]]></column>
<column num="2"><![CDATA[sd&]]></column>
Какую версию JRE Вы выполняете? В Проекте саксофона говорится:
J2SE 1.4 связывает старую версию SAX2. Как я делаю SAX2 r2 или позже доступным?