Zapraszamy do obejrzenia tej link od w3, mówi mi, że:
In HTML, there is a list of some built-in character names like é
for é but XML does not have this. In XML, there are only five built-in character entities: <
, >
, &
, "
and '
for <, >, &, " and ' respectively. You can define your own entities in a Document Type Definition, or you can use any Unicode character (see next item).
In HTML, there are also numeric character references, such as &
for &. You can refer to any Unicode character, but the number is decimal, whereas in the Unicode tables the number is usually in hexadecimal. XML also allows hexadecimal references: &
for example.
To prowadzi mnie do przekonania, że é
może działać dla é postaci.
Również informacje na ten link firmy Microsoft stwierdza, że:
SQLXML 4.0 relies upon the limited support for DTDs provided in SQL Server. SQL Server allows for an internal DTD in xml data type data, which can be used to supply default values and to replace entity references with their expanded contents. SQLXML passes the XML data "as is" (including the internal DTD) to the server. You can convert DTDs to XML Schema (XSD) documents using third-party tools, and load the data with inline XSD schemas into the database.
Ale to wszystko nie pomoże, jeśli nie masz kontroli nad przychodzącym strumieniu XML. Wątpię, czy możliwe jest zapisanie é (lub jakiejkolwiek specjalnej postaci w tym przypadku, z wyjątkiem wbudowanych jednostek znakowych wymienionych powyżej) wewnątrz dokumentu XML do pola XML serwera SQL, bez dodawania DTD lub zastępowania znaku przez jego szesnastkowy odpowiednik. W obu przypadkach konieczne będzie umożliwienie modyfikacji kodu XML zanim trafi on do bazy danych.
Po prostu szybki przykład dla każdego, kto chce zejść z trasy "dodając DTD".
Oto jak dodać wewnętrzną DTD do pliku XML, który deklaruje podmiot na znak E:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [<!ENTITY eacute "é">]>
<root>
<RegionName>Québec</RegionName>
</root>
Jeśli pójdziesz here i szukać na stronie „Ctrl + F” za „eacute” trafisz na listę z przykładami innych postaci, które możesz po prostu skopiować i wkleić do własnego wewnętrznego DTD.
Edit
Mogłeś poza oczywiście dodać wszystkie podmioty, jak zostały one określone w link powyżej: <!ENTITY eacute "é"><!ENTITY .. // Next entity>
, lub po prostu skopiować je wszystkie z tego file. Rozumiem, że dodanie wewnętrznego DTD do każdego pliku XML dodanego do bazy danych nie jest dobrym pomysłem. Byłbym zainteresowany, aby dowiedzieć się, czy dodanie go do pliku 1 rozwiązuje problem.
I * think * serwer sql używa kodowania utf-16, a deklaracja 'utf-8' w xml jest przyczyną niepowodzenia. FWIW, jeśli całkowicie usuniesz deklarację "kodowania" lub zmienisz ją na "encoding =" UTF-16 ", wstawienie powiedzie się w CF10, z włączoną opcją" Włącz wysokie znaki ASCII ... ". (Zmiana kodowania tylko łańcucha nie przyniosła skutku.) Jednak nie wiem, czy ma to negatywny wpływ na stronę. – Leigh
Uwaga, kodowanie znaków jest * nie * moje hasło ;-) Powyższy komentarz jest oparty tylko na kilku szybkich testach. To nie jest solidna odpowiedź, ale mam nadzieję, że pomoże wskazać ci właściwy kierunek. – Leigh
Jak otrzymujesz XML? Brzmi dla mnie tak, jakbyś nie mówił CF, że to UTF-8. –