Я столкнулся с проблемой. Я пытаюсь разобрать указанный c XML документ. Документ начинается с тега, и внутри этих тегов может быть несколько кандидатов (в моем примере я предоставил 2 из них, но может быть любое количество предоставленных кандидатов.
Также у заявителя может быть несколько теги сохранены, опыт работы и т. д.
Проблема, с которой я сталкиваюсь, не может разобрать XML правильно, я получаю много повторяющихся строк и не могу понять, что проблема в
Я пытаюсь проанализировать данные с помощью CrossApply, и я знаю, что различение значений не является правильным способом.
Может кто-нибудь, пожалуйста, дайте мне знать, как я могу правильно проанализировать данные xml, если я не знаю, сколько претендентов содержится в файле XML?
IF OBJECT_ID('tempdb..#XmlApplicant') IS NOT NULL DROP TABLE #XmlApplicant
SELECT T.c.value('applicant_id[1]', 'varchar(500)') AS 'applicant_id'
,T.c.value('cv_id[1]', 'varchar(500)') AS 'cv_id'
,T.c.value('time[1]', 'varchar(500)') AS 'time'
,T.c.value('cover_letter[1]', 'varchar(max)') AS 'cover_letter'
,T.c.value('questions_answers[1]/question_1[1]', 'varchar(500)') AS 'question_1'
,T.c.value('questions_answers[1]/question_2[1]', 'varchar(500)') AS 'question_2'
,T.c.value('questions_answers[1]/question_3[1]', 'varchar(500)') AS 'question_3'
,T.c.value('questions_answers[1]/answer_1[1]', 'varchar(500)') AS 'answer_1'
,T.c.value('questions_answers[1]/answer_1[1]', 'varchar(500)') AS 'answer_2'
,T.c.value('questions_answers[1]/answer_1[1]', 'varchar(500)') AS 'answer_3'
,T.c.value('application_url[1]', 'varchar(500)') AS 'application_url'
,T.c.value('personal[1]/name[1]', 'varchar(500)') AS 'name'
,T.c.value('personal[1]/gender[1]', 'varchar(500)') AS 'gender'
,T.c.value('personal[1]/birth_date[1]', 'varchar(500)') AS 'birth_date'
,T.c.value('personal[1]/city[1]', 'varchar(500)') AS 'city'
,T.c.value('personal[1]/phone[1]', 'varchar(500)') AS 'phone'
,T.c.value('personal[1]/mail[1]', 'varchar(500)') AS 'mail'
,T.c.value('personal[1]/description[1]', 'varchar(500)') AS 'description'
,T.c.value('personal[1]/desired_salary[1]', 'varchar(500)') AS 'desired_salary'
,T.c.value('personal[1]/updated_date[1]', 'varchar(500)') AS 'updated_date'
,SUBSTRING(T.c.value('personal[1]/name[1]', 'varchar(500)'), 1, CHARINDEX(' ', T.c.value('personal[1]/name[1]', 'varchar(500)')) - 1) AS Vardas
,REVERSE(SUBSTRING(REVERSE(T.c.value('personal[1]/name[1]', 'varchar(500)')), 1, CHARINDEX(' ', REVERSE(T.c.value('personal[1]/name[1]', 'varchar(500)'))) - 1)) AS Pavarde
INTO #XmlApplicant
FROM #xmlDataParse
CROSS APPLY #xmlDataParse._xml.nodes('/response/applicant') T(c)
ORDER BY applicant_id ASC
IF OBJECT_ID('tempdb..#XmlEducation') IS NOT NULL DROP TABLE #XmlEducation
SELECT DISTINCT T.c.value('applicant_id[1]', 'varchar(500)') AS 'applicant_id'
,T.c.value('cv_id[1]', 'varchar(500)') AS 'cv_id'
,Education.c.value('date_from[1]', 'varchar(500)') AS 'date_from'
,Education.c.value('date_till[1]', 'varchar(500)') AS 'date_till'
,Education.c.value('institution[1]', 'varchar(500)') AS 'institution'
,Education.c.value('speciality[1]', 'varchar(500)') AS 'speciality'
,Education.c.value('degree[1]', 'varchar(500)') AS 'degree'
INTO #XmlEducation
FROM #xmlDataParse
CROSS APPLY #xmlDataParse._xml.nodes('/response/applicant') T(c)
CROSS APPLY #xmlDataParse._xml.nodes('/response/applicant/education') Education(c)
IF OBJECT_ID('tempdb..#XmlCourses') IS NOT NULL DROP TABLE #XmlCourses
SELECT DISTINCT T.c.value('applicant_id[1]', 'varchar(500)') AS 'applicant_id'
,T.c.value('cv_id[1]', 'varchar(500)') AS 'cv_id'
,Courses.c.value('date[1]', 'varchar(500)') AS 'date'
,Courses.c.value('duration[1]', 'varchar(500)') AS 'duration'
,Courses.c.value('organizator[1]', 'varchar(500)') AS 'organizator'
,Courses.c.value('title[1]', 'varchar(500)') AS 'title'
,Courses.c.value('description[1]', 'varchar(max)') AS 'description'
,Courses.c.value('certificate_till[1]', 'varchar(500)') AS 'certificate_till'
INTO #XmlCourses
FROM #xmlDataParse
CROSS APPLY #xmlDataParse._xml.nodes('/response/applicant') T(c)
CROSS APPLY #xmlDataParse._xml.nodes('/response/applicant/courses') Courses(c)
ORDER BY applicant_id ASC
Я привел пример xml, который я пытаюсь проанализировать ниже
<response>
<applicant>
<applicant_id>2090505093</applicant_id>
<cv_id>880667422</cv_id>
<time>2020-02-04 00:26:00</time>
<cover_letter />
<questions_answers>
<question_1 />
<question_2 />
<question_3 />
<answer_1 />
<answer_2 />
<answer_3 />
</questions_answers>
<application_url>testUrl</application_url>
<personal>
<name>TestName</name>
<gender>woman</gender>
<birth_date>1992.09.25</birth_date>
<city>TestCity</city>
<phone>88888888</phone>
<mail>TestEmail@email.com</mail>
<description />
<desired_salary>0</desired_salary>
<updated_date />
</personal>
<education>
<date_from>2010</date_from>
<date_till>2013</date_till>
<institution>TEST Institution</institution>
<speciality>TEST</speciality>
<degree>Professional</degree>
</education>
<courses>
<date>2008.08</date>
<duration>270</duration>
<organizator>TEST</organizator>
<title>TEST</title>
<description>TEST</description>
<certificate_till />
</courses>
<experience>
<date_from>2017.01</date_from>
<date_till>2019.12</date_till>
<company> Romance Design</company>
<company_www />
<position> TEST </position>
<description>TEST</description>
</experience>
<experience>
<date_from>2014.09</date_from>
<date_till>2017.01</date_till>
<company>"Yves Rocher"</company>
<company_www>
<href>http://www.yvesrocher.ca/control/main/</href>
<text>www.yvesrocher.ca/control/main/</text>
</company_www>
<position>(Malta)</position>
<description>TEST DESCRIPTION</description>
</experience>
<experience>
<date_from>2013.10</date_from>
<date_till>2014.08</date_till>
<company>Rampila</company>
<company_www />
<position>(Malta)</position>
<description>DESCRIPTION TEST</description>
</experience>
<membership />
<recommendations />
<languages>
<language>English</language>
<write>5</write>
<speak>5</speak>
<understand>5</understand>
</languages>
<languages>
<language>Russian</language>
<write>2</write>
<speak>2</speak>
<understand>2</understand>
</languages>
<languages>
<language>Norwegian</language>
<write>2</write>
<speak>2</speak>
<understand>2</understand>
</languages>
<computer>
<Software>
<title>Photoshop</title>
<c_experience>3-4 y.</c_experience>
</Software>
</computer>
<extra />
<image>
<src>TEST FOTO URL</src>
</image>
<ad>
<id>6557177</id>
<imported_ad_id />
<position>TEST POSITION</position>
<city>Vilnius</city>
</ad>
</applicant>
<applicant>
<applicant_id>2090504647</applicant_id>
<cv_id>1426533964</cv_id>
<time>2020-02-03 23:46:02</time>
<cover_letter>TEST2</cover_letter>
<questions_answers>
<question_1 />
<question_2 />
<question_3 />
<answer_1 />
<answer_2 />
<answer_3 />
</questions_answers>
<application_url>TEST2</application_url>
<personal>
<name>TEST2</name>
<gender>man</gender>
<birth_date>1987.10.02</birth_date>
<city>TEST2</city>
<phone>+37067658006</phone>
<mail>TEST2</mail>
<description>TEST2</description>
<desired_salary>0</desired_salary>
<updated_date />
</personal>
<education>
<date_from>2008</date_from>
<date_till>2010</date_till>
<institution>TEST2</institution>
<speciality>TEST2</speciality>
<degree>Higher/Bachelor</degree>
</education>
<education>
<date_from>2006</date_from>
<date_till>2008</date_till>
<institution>TEST2</institution>
<speciality>TEST2</speciality>
<degree>Professional</degree>
</education>
<education>
<date_from>2003</date_from>
<date_till>2006</date_till>
<institution>TEST2</institution>
<speciality />
<degree>Secondary</degree>
</education>
<courses>
<date>2018.05</date>
<duration>0</duration>
<organizator>LFF</organizator>
<title>TEST2</title>
<description>TEST2</description>
<certificate_till />
</courses>
<courses>
<date>2011</date>
<duration>0</duration>
<organizator>FIFA</organizator>
<title>TEST2</title>
<description>TEST2</description>
<certificate_till />
</courses>
<experience>
<date_from>2004</date_from>
<date_till>Present</date_till>
<company>LFTA</company>
<company_www>
<href>http://www.lfta.lt</href>
<text>www.lfta.lt</text>
</company_www>
<position>TEST2</position>
<description>TEST2</description>
</experience>
<experience>
<date_from>2019.08</date_from>
<date_till>2019.11</date_till>
<company>UAB Tekita</company>
<company_www />
<position>vadybininkas</position>
<description>TEST2</description>
</experience>
<experience>
<date_from>2019.03</date_from>
<date_till>2019.06</date_till>
<company>UAB Elektpro</company>
<company_www>
<href>http://www.palapiniumagnatai.lt</href>
<text>www.palapiniumagnatai.lt</text>
</company_www>
<position>TEST2</position>
<description>TESt2</description>
</experience>
<experience>
<date_from>2007</date_from>
<date_till>2016</date_till>
<company>Mars TEST2</company>
<company_www>
<href>TESTURL</href>
<text>TEST URL TEXT</text>
</company_www>
<position>TEST2</position>
<description>TEST5</description>
</experience>
<membership />
<recommendations />
<languages>
<language>Russian</language>
<write>5</write>
<speak>5</speak>
<understand>5</understand>
</languages>
<languages>
<language>English</language>
<write>4</write>
<speak>4</speak>
<understand>5</understand>
</languages>
<languages>
<language>Spanish</language>
<write>2</write>
<speak>2</speak>
<understand>3</understand>
</languages>
<computer>
<Software>
<title>Excel</title>
<c_experience>1-2 y.</c_experience>
</Software>
<Software>
<title>PowerPoint</title>
<c_experience>4 y. and more.</c_experience>
</Software>
<Software>
<title>Word</title>
<c_experience>4 y. and more.</c_experience>
</Software>
<OS>
<title>Windows</title>
<c_experience>4 y. and more.</c_experience>
</OS>
</computer>
<extra>
<driving_categories>
<category>B</category>
<experience_year>3</experience_year>
</driving_categories>
<hobbies>TEST H</hobbies>
</extra>
<image>
<src>img.jpg</src>
</image>
<ad>
<id>6559735</id>
<imported_ad_id />
<position>TEDST </position>
<city>TEST</city>
</ad>
</applicant>
</response>