使用 XSL 进行 XML 排序 [英] XML Sorting Using XSL
问题描述
我有一个 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屋!