Ich versuche, T-SQL's OPENXML
Funktion verwenden, um XML in Tabellenform zu analysieren, aber ich bekomme irreführende Fehler in Anwesenheit von Namespace-Attributen.Wie Namespace-Attribute mit OPENXML verwenden?
Zum Beispiel SQL Server beanspruchen den folgend zu diesem wohlgeformten XML-Dokument:
DECLARE @hdoc int;
DECLARE @doc varchar(1000);
SET @doc =
'
<?xml version="1.0" encoding="UTF-8"?>
<Data xmlns="http://www.digitalmeasures.com/schema/data" xmlns:dmd="http://www.digitalmeasures.com/schema/data-metadata" dmd:date="2016-06-13">
<Record userId="123456" username="jeffp" termId="129" dmd:surveyId="1234567">
<dmd:IndexEntry indexKey="AACSBSUFF" entryKey="Participating" text="Participating"/>
<dmd:IndexEntry indexKey="DEPARTMENT" entryKey="WCBD" text="WCBD"/>
<dmd:IndexEntry indexKey="QUALIFICATION" entryKey="Instructional Practitioner" text="Instructional Practitioner"/>
<dmd:IndexEntry indexKey="RANK" entryKey="Academic Staff" text="Academic Staff"/>
<GENSERVE id="33426841601" dmd:lastModified="2011-03-15T10:23:01" dmd:startDate="2010-07-01">
<TYPE>University</TYPE>
<TYPEOTHER/>
<ORG>University Academic Advising Council </ORG>
<ROLE>Committee Member</ROLE>
<ROLEOTHER/>
<OFFICE>President/Elect/Past</OFFICE>
<RESPONSIBILITIES/>
<NUMHOURS/>
<ELECAPP>Elected</ELECAPP>
<AUDIENCE>Local</AUDIENCE>
<EXOFFICIO/>
<DTM_START>July</DTM_START>
<DTD_START/>
<DTY_START>2010</DTY_START>
<START_START>2010-07-01</START_START>
<START_END>2010-07-31</START_END>
<DTM_END/>
<DTD_END/>
<DTY_END/>
<END_START></END_START>
<END_END></END_END>
</GENSERVE>
</Record>
</Data>
';
EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc;
SELECT *
FROM OPENXML (@hdoc, '/Data/Record/GENSERVE', 2)
with(TYPE varchar(250),
ORG varchar(250) )
exec sp_xml_removedocument @hdoc;
The XML parse error 0xc00ce55e occurred on line number 20, near the XML text " <AUDIEN". The error description is 'Element was not closed.'.
Nun, das ist einfach lächerlich ist, weil, wenn ich einfach diese Zeilen löscht:
<dmd:IndexEntry indexKey="AACSBSUFF" entryKey="Participating" text="Participating"/>
<dmd:IndexEntry indexKey="DEPARTMENT" entryKey="WCBD" text="WCBD"/>
<dmd:IndexEntry indexKey="QUALIFICATION" entryKey="Instructional Practitioner" text="Instructional Practitioner"/>
<dmd:IndexEntry indexKey="RANK" entryKey="Academic Staff" text="Academic Staff"/>
Dann bekomme ich keine Fehler - aber auch keine Daten - nur leere Spalten.
Nur wenn ich gehe und lösche alle Verweis auf einen Namespace, dann wird es funktionieren.
<?xml version="1.0" encoding="UTF-8"?>
<Data>
<Record userId="123456" username="jeffp" termId="129">
<GENSERVE id="33426841601" >
<TYPE>University</TYPE>
<TYPEOTHER/>
<ORG>University Academic Advising Council </ORG>
<ROLE>Committee Member</ROLE>
<ROLEOTHER/>
<OFFICE>President/Elect/Past</OFFICE>
<RESPONSIBILITIES/>
<NUMHOURS/>
<ELECAPP>Elected</ELECAPP>
<AUDIENCE>Local</AUDIENCE>
<EXOFFICIO/>
<DTM_START>July</DTM_START>
<DTD_START/>
<DTY_START>2010</DTY_START>
<START_START>2010-07-01</START_START>
<START_END>2010-07-31</START_END>
<DTM_END/>
<DTD_END/>
<DTY_END/>
<END_START></END_START>
<END_END></END_END>
</GENSERVE>
</Record>
</Data>
TYPE ORG University University Academic Advising Council
Wie kann ich in den Namespace Attribute lesen Sie auch?
Oh super, danke, das macht so viel Sinn Ich fühle mich dumm! Ich freue mich darauf, es zu versuchen, wenn ich wieder an die Arbeit komme, danke! –
Nochmals vielen Dank, dass Sie nicht nur mein dummes Problem behoben und meine Frage beantwortet haben, sondern vor allem Ihre verbesserte Lösung * mit dem XQuery- und XML-Datentyp von SQL Server *, die mir völlig unbekannt war. Weg zur Lösung [das XY-Problem] (http://meta.stackexchange.com/a/66378/321521)! –