древовидный XML -> SQL2000 (Помогите разобраться, плз,)

Dazlak
Дата: 15.09.2006 12:32:35
У меня есть хмл файл вида :
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
- <DATAPACKET Version="2.0">
- <METADATA>
- <FIELDS>
<FIELD attrname="code" fieldtype="i4" readonly="true" SUBTYPE="Autoinc" />
<FIELD attrname="upcode" fieldtype="i4" />
<FIELD attrname="collapsed" fieldtype="boolean" />
<FIELD attrname="name" fieldtype="string" SUBTYPE="FixedChar" WIDTH="40" />
</FIELDS>
<PARAMS />
</METADATA>
- <ROWDATA>
<ROW code="340" upcode="0" collapsed="FALSE" name="" />
<ROW code="235" upcode="0" collapsed="FALSE" name="Àëêîãîëü" />
......
<ROW code="226" upcode="0" collapsed="TRUE" name="Áàêàëåÿ" />
</ROWDATA>
</DATAPACKET>

в QA написал :

DECLARE @idoc int
DECLARE @doc varchar(8000)
SET @doc = '
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
- <DATAPACKET Version="2.0">
- <METADATA>
- <FIELDS>
<FIELD attrname="code" fieldtype="i4" readonly="true" SUBTYPE="Autoinc" />
<FIELD attrname="upcode" fieldtype="i4" />
<FIELD attrname="collapsed" fieldtype="boolean" />
<FIELD attrname="name" fieldtype="string" SUBTYPE="FixedChar" WIDTH="40" />
</FIELDS>
<PARAMS />
</METADATA>
- <ROWDATA>
<ROW code="340" upcode="0" collapsed="FALSE" name="" />
<ROW code="235" upcode="0" collapsed="FALSE" name="Aeeiaieu" />
.......
<ROW code="226" upcode="0" collapsed="TRUE" name="Aaeaeay" />
'
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
SELECT * FROM OPENXML (@idoc, '/code/upcode/collapsed/name',1)
WITH (
code int,
upcode int,
collapsed bit,
name varchar(100)
)

Server: Msg 6603, Level 16, State 1, Procedure sp_xml_preparedocument, Line 135
XML parsing error: Invalid at the top level of the document.

не работает , сам понимаю что написал ерунду . Надеюсь вы мне подскажите как это сделать .
igorolv
Дата: 15.09.2006 13:37:01
XML-ка невалидная.
Я ее немножко поменял - вот так работает.

DECLARE @idoc int
DECLARE @doc varchar(8000)
SET @doc = '
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<DATAPACKET Version="2.0">
<METADATA>
<FIELDS>
<FIELD attrname="code" fieldtype="i4" readonly="true" SUBTYPE="Autoinc" />
<FIELD attrname="upcode" fieldtype="i4" />
<FIELD attrname="collapsed" fieldtype="boolean" />
<FIELD attrname="name" fieldtype="string" SUBTYPE="FixedChar" WIDTH="40" />
</FIELDS>
<PARAMS />
</METADATA>
<ROWDATA>
<ROW code="340" upcode="0" collapsed="FALSE" name="" />
<ROW code="235" upcode="0" collapsed="FALSE" name="Aeeiaieu" />
<ROW code="226" upcode="0" collapsed="TRUE" name="Aaeaeay" />
</ROWDATA>
</DATAPACKET>
'
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
SELECT * FROM OPENXML (@idoc, '/DATAPACKET/ROWDATA/ROW',1)
WITH (
code int,
upcode int,
collapsed bit,
name varchar(100)
)
Dazlak
Дата: 15.09.2006 15:32:36
Спасибо, прошло но не полнустью , только заменив bit на varchar - сработало.
Кто подскажет почему ?
И вопрос как победить кодировку , что бы не было этих кроказябр.???
Жду вашего совета ,
спс igorolv .