使用 XSL 进行 XML 排序 [英] XML Sorting Using XSL

查看:29
本文介绍了使用 XSL 进行 XML 排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 XML 文件

I have an XML File

<?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>abc@xyz.com</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>

如您所见,此文件包含不同的部分、联系信息、专业和教育?

As you can see this file contains different sections, contact-information, professional and education?

我想使用 xsl 对这些部分进行排序.

I want to sort these sections using xsl.

排序我的意思是,当应用 xsl 转换时,我希望专业部分首先出现在转换后的 xml 中.

By sorting i mean that i want the professional section to appear first in the transformed xml when xsl transformation is applied.

我怎样才能在 xsl 中做到这一点?xml 元素是如何解析的?意思是优先级?

How can i do that in xsl? How are xml elements parsed? Meaning priority?

推荐答案

这种转变:

<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 参数中指定的排名生成排序结果:

when applied on the provided XML document, produces the sorted result as per the rankings specified in the pRanks parameter:

<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>abc@xyz.com</email>
</contact-information>

注意:$pRanks 参数可以在外部指定,这样转换就不需要编辑了.

Do note: The $pRanks parameter can be specified externally so that the transformation will never need to be edited.

这篇关于使用 XSL 进行 XML 排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆