2010-11-18 5 views
1

У меня есть XML-файлXML Сортировка с помощью XSL

<?xml version="1.0" encoding="UTF-8"?> 
<data> 

<contact-information> 

    <full-name>Peter John</full-name> 
    <address_line_1>some place</address_line_1> 
    <address_line_2>some place2</address_line_2> 
    <city>some city</city> 
    <state>some state</state> 
    <zip>54000</zip> 
    <country>some country</country> 
    <phone>2121314144</phone> 
    <email>[email protected]</email> 

</contact-information> 

<professional-experience-section> 
    <section-name>PROFESSIONAL EXPERIENCE</section-name> 
    <enabled>true</enabled> 
    <company> 
    <name>Computer Sciences Corporation</name> 
    <city>New York</city> 
    <state>NY</state> 
    <country>United States</country> 
    <job-title> 
     <title>Senior Software Engineer</title> 
     <start-date>Aug 1996</start-date> 
     <end-date>May 2010</end-date> 
     <ongoing>false</ongoing> 
     <job-description> 
     <bullet-point> 
      <statement>C#, Visual Basic, Asp.net</statement> 
     </bullet-point> 
     <bullet-point> 
      <statement>Inspect completed work to ensure conformance to specifications, standards, and contract requirements.</statement> 
     </bullet-point> 
     <bullet-point> 
      <statement>Another Work Description.</statement> 
     </bullet-point> 
     </job-description> 
    </job-title> 
    </company> 
    <company> 
    <name>Acme</name> 
    <city>Silver Spring</city> 
    <state>MD</state> 
    <country>United States</country> 
    <job-title> 
     <title>Manager</title> 
     <start-date>Jul 2010</start-date> 
     <end-date>present</end-date> 
     <ongoing>true</ongoing> 
     <job-description> 
     <bullet-point> 
      <statement>Report to management regarding the finances of establishment.</statement> 
     </bullet-point> 
     <bullet-point> 
      <statement>Prepare, examine, or analyze accounting records, financial statements, or other financial reports to assess accuracy, completeness, and conformance to reporting and procedural standards.</statement> 
     </bullet-point> 
     <bullet-point> 
      <statement>Prepare, examine, or analyze accounting records, financial statements, or other financial reports to assess accuracy, completeness, and conformance to reporting and procedural standards.</statement> 
     </bullet-point> 
     </job-description> 
    </job-title> 

    <job-title> 
     <title>Analyst</title> 
     <start-date>Jul 2001</start-date> 
     <end-date>Jan 2010</end-date> 
     <ongoing>false</ongoing> 
     <job-description> 
     <bullet-point> 
      <statement>Study and rehearse roles from scripts in order to interpret, learn and memorize lines, stunts, and cues as directed.</statement> 
     </bullet-point> 
     <bullet-point> 
      <statement>Work closely with directors, other actors, and playwrights to find the interpretation most suited to the role.</statement> 
     </bullet-point> 
     </job-description> 
    </job-title> 

    </company> 
</professional-experience-section> 


<education-section> 
    <section-name>EDUCATION</section-name> 
    <enabled>true</enabled> 
    <institution> 
    <name>Allston Community College</name> 
    <city>Akron</city> 
    <state>MA</state> 
    <country>United States</country> 
    <degree>Bachelor of Art in Marketing Candidate</degree> 
    <end-date>Jan 2020</end-date> 
    <ongoing>true</ongoing> 
    <expected-completion-date>Jan 2020</expected-completion-date> 
    <completed></completed> 
    <bullet-point> 
     <statement>detail of what i did at the allston community college</statement> 
    </bullet-point> 
    </institution> 
    <institution> 
    <name>Boston College</name> 
    <city>Boston</city> 
    <state>MA</state> 
    <country>United States</country> 
    <degree>Bachelor of Science in Information Systems</degree> 
    <end-date>Jul 1990</end-date> 
    <ongoing>false</ongoing> 
    <expected-completion-date></expected-completion-date> 
    <completed>true</completed> 
    <bullet-point> 
     <statement>Lorem Ipsum</statement> 
    </bullet-point> 
    </institution> 
    <institution> 
    <name>Testing</name> 
    <city>Testing</city> 
    <state>PA</state> 
    <country>United States</country> 
    <degree>Completed coursework towards Bachelor of Art in Marketing</degree> 
    <end-date>Mar 1963</end-date> 
    <ongoing>false</ongoing> 
    <expected-completion-date></expected-completion-date> 
    <completed>false</completed> 
    <bullet-point> 
     <statement>Lorem Ipsum</statement> 
    </bullet-point> 
    </institution> 
    <institution> 
    <name>Testing</name> 
    <city>Testing</city> 
    <state>PA</state> 
    <country>United States</country> 
    <degree>Completed coursework towards Bachelor of Art in Marketing</degree> 
    <end-date>Mar 1963</end-date> 
    <ongoing>false</ongoing> 
    <expected-completion-date></expected-completion-date> 
    <completed>false</completed> 
    <bullet-point> 
     <statement>Lorem Ipsum</statement> 
    </bullet-point> 
    </institution> 
</education-section> 
<additional-skills-section> 
    <section-name>ADDITIONAL SKILLS</section-name> 
    <enabled>true</enabled> 
    <layout>1 Column</layout> 
    <bullet-point> 
    <statement>Additional Skills 1</statement> 
    </bullet-point> 
    </additional-skills-section> 
<custom-section> 
    <section-name>PUBLICATIONS</section-name> 
    <layout>2</layout> 
    <bullet-point> 
    <statement>test</statement> 
    </bullet-point> 
</custom-section> 

</data> 

Как вы можете видеть, этот файл содержит различные разделы, бесконтактную информацию, профессиональные и образование?

Я хочу отсортировать эти разделы с помощью xsl.

Посредством сортировки я хочу сказать, что я хочу, чтобы профессиональный раздел появился первым в преобразованном xml при применении преобразования xsl.

Как я могу это сделать в xsl? Как анализируются элементы xml? Значение приоритета?

+0

расскажите, как вы их разобрали сейчас, поэтому мы можем пойти оттуда. –

+0

Хороший вопрос, +1. См. Мой ответ для полного и короткого решения, которое полностью настраивается и параметризуется. –

+0

Кажется, вы не посмотрели мой ответ? –

ответ

1

Это преобразование:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:param name="pRanks"> 
    <professional-experience-section r="1"/> 
    <education-section r="2"/> 
    <additional-skills-section r="3"/> 
    <custom-section r="4"/> 
    <contact-information r="5"/> 
</xsl:param> 

<xsl:variable name="vRanks" select= 
    "document('')/*/xsl:param[@name='pRanks']"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
    <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="/*"> 
    <xsl:apply-templates select="*"> 
    <xsl:sort select="$vRanks/*[name()=name(current())]/@r" 
      data-type="number"/> 
    </xsl:apply-templates> 
</xsl:template> 
</xsl:stylesheet> 

при нанесении на прилагаемом документе XML, производит отсортированный результат, в рейтинге, указанных в параметреpRanks:

<professional-experience-section> 
    <section-name>PROFESSIONAL EXPERIENCE</section-name> 
    <enabled>true</enabled> 
    <company> 
     <name>Computer Sciences Corporation</name> 
     <city>New York</city> 
     <state>NY</state> 
     <country>United States</country> 
     <job-title> 
     <title>Senior Software Engineer</title> 
     <start-date>Aug 1996</start-date> 
     <end-date>May 2010</end-date> 
     <ongoing>false</ongoing> 
     <job-description> 
      <bullet-point> 
       <statement>C#, Visual Basic, Asp.net</statement> 
      </bullet-point> 
      <bullet-point> 
       <statement>Inspect completed work to ensure conformance to specifications, standards, and contract requirements.</statement> 
      </bullet-point> 
      <bullet-point> 
       <statement>Another Work Description.</statement> 
      </bullet-point> 
     </job-description> 
     </job-title> 
    </company> 
    <company> 
     <name>Acme</name> 
     <city>Silver Spring</city> 
     <state>MD</state> 
     <country>United States</country> 
     <job-title> 
     <title>Manager</title> 
     <start-date>Jul 2010</start-date> 
     <end-date>present</end-date> 
     <ongoing>true</ongoing> 
     <job-description> 
      <bullet-point> 
       <statement>Report to management regarding the finances of establishment.</statement> 
      </bullet-point> 
      <bullet-point> 
       <statement>Prepare, examine, or analyze accounting records, financial statements, or other financial reports to assess accuracy, completeness, and conformance to reporting and procedural standards.</statement> 
      </bullet-point> 
      <bullet-point> 
       <statement>Prepare, examine, or analyze accounting records, financial statements, or other financial reports to assess accuracy, completeness, and conformance to reporting and procedural standards.</statement> 
      </bullet-point> 
     </job-description> 
     </job-title> 
     <job-title> 
     <title>Analyst</title> 
     <start-date>Jul 2001</start-date> 
     <end-date>Jan 2010</end-date> 
     <ongoing>false</ongoing> 
     <job-description> 
      <bullet-point> 
       <statement>Study and rehearse roles from scripts in order to interpret, learn and memorize lines, stunts, and cues as directed.</statement> 
      </bullet-point> 
      <bullet-point> 
       <statement>Work closely with directors, other actors, and playwrights to find the interpretation most suited to the role.</statement> 
      </bullet-point> 
     </job-description> 
     </job-title> 
    </company> 
</professional-experience-section> 
<education-section> 
    <section-name>EDUCATION</section-name> 
    <enabled>true</enabled> 
    <institution> 
     <name>Allston Community College</name> 
     <city>Akron</city> 
     <state>MA</state> 
     <country>United States</country> 
     <degree>Bachelor of Art in Marketing Candidate</degree> 
     <end-date>Jan 2020</end-date> 
     <ongoing>true</ongoing> 
     <expected-completion-date>Jan 2020</expected-completion-date> 
     <completed/> 
     <bullet-point> 
     <statement>detail of what i did at the allston community college</statement> 
     </bullet-point> 
    </institution> 
    <institution> 
     <name>Boston College</name> 
     <city>Boston</city> 
     <state>MA</state> 
     <country>United States</country> 
     <degree>Bachelor of Science in Information Systems</degree> 
     <end-date>Jul 1990</end-date> 
     <ongoing>false</ongoing> 
     <expected-completion-date/> 
     <completed>true</completed> 
     <bullet-point> 
     <statement>Lorem Ipsum</statement> 
     </bullet-point> 
    </institution> 
    <institution> 
     <name>Testing</name> 
     <city>Testing</city> 
     <state>PA</state> 
     <country>United States</country> 
     <degree>Completed coursework towards Bachelor of Art in Marketing</degree> 
     <end-date>Mar 1963</end-date> 
     <ongoing>false</ongoing> 
     <expected-completion-date/> 
     <completed>false</completed> 
     <bullet-point> 
     <statement>Lorem Ipsum</statement> 
     </bullet-point> 
    </institution> 
    <institution> 
     <name>Testing</name> 
     <city>Testing</city> 
     <state>PA</state> 
     <country>United States</country> 
     <degree>Completed coursework towards Bachelor of Art in Marketing</degree> 
     <end-date>Mar 1963</end-date> 
     <ongoing>false</ongoing> 
     <expected-completion-date/> 
     <completed>false</completed> 
     <bullet-point> 
     <statement>Lorem Ipsum</statement> 
     </bullet-point> 
    </institution> 
</education-section> 
<additional-skills-section> 
    <section-name>ADDITIONAL SKILLS</section-name> 
    <enabled>true</enabled> 
    <layout>1 Column</layout> 
    <bullet-point> 
     <statement>Additional Skills 1</statement> 
    </bullet-point> 
</additional-skills-section> 
<custom-section> 
    <section-name>PUBLICATIONS</section-name> 
    <layout>2</layout> 
    <bullet-point> 
     <statement>test</statement> 
    </bullet-point> 
</custom-section> 
<contact-information> 
    <full-name>Peter John</full-name> 
    <address_line_1>some place</address_line_1> 
    <address_line_2>some place2</address_line_2> 
    <city>some city</city> 
    <state>some state</state> 
    <zip>54000</zip> 
    <country>some country</country> 
    <phone>2121314144</phone> 
    <email>[email protected]</email> 
</contact-information> 

Обратите внимание: Параметр $pRanks можно определить внешне, так что преобразование никогда не должны быть отредактированы.

0

Ну, без корневого элемента ваша разметка не является хорошо сформированным XML-документом. И если вы хотите, чтобы мы помогали с XSLT, нам также нужно знать, что такое корневой элемент. Если предположить, что у вас есть элемент с именем «данные» оберточной те элементы, которые были размещены, и вы хотите, чтобы изменить порядок их с помощью XSLT 1.0, то сделать

<xsl:template match="data"> 
    <xsl:copy> 
    <xsl:copy-of select="professional-experience-section"/> 
    <xsl:copy-of select="*[not(self::professional-experience-section)]"/> 
    </xsl:copy> 
</xsl:template> 
+0

Мой корневой элемент - это элемент данных и что делает ваша часть кода? –

1

Это таблицы стилей изменения Лил правило идентичности:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="node()|@*"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*"/> 
      <xsl:apply-templates select="node()"> 
       <xsl:sort select="not(self::professional-experience-section)"/> 
      </xsl:apply-templates> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 
+0

это просто сортирует раздел профессионального опыта, что, если я хочу сортировать по любому разделу –

+0

@Sultan Saadat: Вы проверили? Это делает именно то, что вы просите: «Сортируя, я хочу сказать, что я хочу, чтобы профессиональная секция отображалась сначала в преобразованном xml». – 2010-11-18 13:28:22

+0

Это также имеет то преимущество, что вы можете перезаписать правило идентификации другими правилами, чтобы преобразование работало так, как если бы исходный источник находился в этом порядке (за исключением «данных», конечно). – 2010-11-18 13:34:17

Смежные вопросы