Utknąłem przy usuwaniu nieprawidłowych znaków z pliku XML. Znalazłem REGEX wzór, który należy odizolować wszystko, co znajduje się niedostępny:Usuwanie niedozwolonych znaków z ciągu XML C#
public static string CleanInvalidXmlChars(string text)
{
// From xml spec valid chars:
// #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
// any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.
string re = @"[^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000-x10FFFF]";
return Regex.Replace(text, re, "");
}
i tu jest mój kod, który odczytuje dane z SQL Server (dobrze, to fragment)
using (var cmd = new SqlCommand(Context.Command, connection))
{
cmd.CommandTimeout = Context.CommandTimeout;
using (var reader = cmd.ExecuteReader())
{
StringBuilder xmlResults = new StringBuilder(string.Empty);
while (reader.Read())
{
xmlResults.Append(reader.GetString(0));
}
if (!string.IsNullOrWhiteSpace(xmlResults.ToString()))
{
var doc = new XmlDocument();
XmlReader xmlReader = XmlReader.Create(new StringReader(xmlResults.ToString()));
doc.Load(xmlReader);
var nav = doc.CreateNavigator();
var objs = nav.Select("/index/type");
foreach (XPathNavigator obj in objs)
{
o.OnNext(obj);
}
}
}
}
Próbowałem owijania CleanInvalindXmlChars
w różnych miejscach:
while (reader.Read())
{
xmlResults.Append(CleanInvalindXmlChars(reader.GetString(0)));
}
albo w
XmlReader xmlReader = XmlReader.Create(new StringReader(CleanInvalindXmlChars(xmlResults.ToString())));
W jednej komórce czytam symbol X0B (mogę to zastąpić w SQL Serverze, ale chcę być na to bezpieczny).
Jednak ja zawsze kończy się błędem
System.Xml.XmlException: '', wartość szesnastkowa 0x0B, jest nieważny charakter. Linia 115, pozycja 33407.
Czy ktoś mógłby mi pomóc rozwiązać ten problem?
Brakuje lewego ukośnika przed 'x10FFFF'. Wątpię jednak, że rozwiąże to problem. –
Czy próbowałeś usunąć ten symbol 'VT' z' input = Regex.Replace (input, @ "[\ x0B]", string.Empty); '? Sądzę, że potrzebujesz tego nieprawidłowego wyrażenia XML charge - '[\ u0000- \ u000C \ u000C \ u000E- \ u0019] +' - aby dopasować i usunąć wszystkie niepoprawne znaki XML z ciągu. –