Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-adatbázis a Microsoft Fabricben
Ez a cikk azt ismerteti, hogy a FOR XML záradék hogyan kezeli az érvénytelen XML-karaktereket, és felsorolja az XML-nevekben érvénytelen karakterek feloldó szabályait.
XML és érvénytelen karakterek esetén
Az SQL Server átalakítja az érvénytelen XML-karaktereket entitássá, amikor azokat visszakapjuk olyan XML-lekérdezéseknél, amelyek nem használják a TYPE direktívát.
Bár az XML 1.0-nak megfelelő elemzők elemzési hibákat okoznak függetlenül attól, hogy ezek a karakterek entitások-e vagy sem, az entitásalakzat jobban igazodik az XML 1.1-hez. Az entitásos űrlap az XML-szabvány későbbi verzióihoz is jobban igazodik. Emellett egyszerűbbé teszi a hibakeresést, mivel az érvénytelen karakter kódpontja láthatóvá válik.
Az XML-eszközök felhasználói számára nincs szükség kerülő megoldásra, mivel az XML-elemző mindkét esetben meghiúsul azon a ponton, ahol az adatstreamben érvénytelen karakterek fordulnak elő. Ha nem XML-eszközöket használ, a módosításhoz frissítenie kell a programozási logikát, hogy entitásértékekként keresse meg ezeket a karaktereket.
A FOR XML lekérdezésekben a következő szóköz karakterek másként vannak kódolva, hogy megőrizhessék jelenlétüket a körkörös feldolgozás során:
Elemtartalomban és attribútumokban:
hex(0D)(kocsivissza)Attribútumtartalomban:
hex(09)(tab),hex(0A)(sorcsatorna)
Ezek a karakterek megmaradnak a kimenetben, és egy elemző nem normalizálja őket.
Menekülési szabályok
Az XML-nevekben (például szóközökben) érvénytelen karaktereket tartalmazó SQL Server-nevek xml-nevekké lesznek lefordítva oly módon, hogy az érvénytelen karaktereket a rendszer feloldott numerikus entitáskódolássá konvertálja.
Egy XML-névben csak két nem betűrendes karakter szerepelhet: a kettőspont (:) és az aláhúzásjel (_). Mivel a kettőspont már a névterek számára van fenntartva, az aláhúzásjelet választották kimenekítő karakterként. A kódoláshoz használt feloldó szabályok a következők:
Minden olyan UCS-2 karakter, amely nem érvényes XML-név karakter az XML 1.0 specifikációnak megfelelően, a
_xHHHH_formában van lementve. AHHHHa karakter négyjegyű hexadecimális UCS-2 kódját jelöli a legfontosabb bit-első sorrendben. AOrder Detailstáblanév példáulOrder_x0020_Detailskódolva van.Az UCS-2 tartományba nem illeszkedő karakterek (az U+00010000 és U+0010FFFF közötti UCS-4 tartománybővítések)
_xHHHHHHHH_kódként kerülnek kódolásra. AHHHHHHHHa karakter nyolcjegyű hexadecimális UCS-4 kódolását jelenti, ha az SQL Server 2000 visszamenőleges kompatibilitási módban van. Ellenkező esetben a karakterek_xHHHHHH_kódolva vannak az ISO szabványnak megfelelően.Az aláhúzásjelet csak akkor kell escape-elni, ha a
xkarakter követi. AOrder_Detailstáblanév például nincs kódolva.Az azonosítók kettőspontja nem szökik meg. Ennek eredményeképpen a névtérelem és az attribútumnevek az XML-lekérdezéssel hozhatók létre. Az alábbi lekérdezés például létrehoz egy névtérattribútumot, amelynek nevében kettőspont szerepel:
SELECT 'namespace-urn' as 'xmlns:namespace', 1 as 'namespace:a' FOR XML RAW;A lekérdezés a következő eredményt hozza létre:
<row xmlns:namespace="namespace-urn" namespace:a="1"/>Az „WITH XMLNAMESPACES” az XML-névterek hozzáadásának ajánlott módja.