положение элементов XML - PullRequest
1 голос
/ 21 ноября 2010

Вот XML-файл

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

<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>

Этот XML-файл преобразуется следующим xsl:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/resume">
    <xsl:value-of select="/resume/contact-information/full-name"/>
    <xsl:value-of select="/resume/contact-information/address_line_1"/>
    <xsl:value-of select="/resume/contact-information/address_line_2"/>
    <xsl:value-of select="/resume/contact-information/city"/>
    <xsl:value-of select="/resume/contact-information/state"/>
    <xsl:value-of select="/resume/contact-information/country"/>
    <xsl:value-of select="/resume/contact-information/phone"/>

    <xsl:for-each select="/resume/professional-experience-section/company"> 
        <!--for company name-->
        <xsl:value-of select="name"/>
        <xsl:value-of select="city"/>, <xsl:value-of select="state"/>
        <xsl:value-of select="country"/>
        <!--loop into job title-->
        <xsl:for-each select="job-title"> 
            <!--for job title-->
            <xsl:value-of select="title"/> 
            <!--for job start date and job end date-->
            <xsl:value-of select="start-date"/> – <xsl:value-of
                select="end-date"/>
            <!--Loop into job description-->
            <xsl:for-each select="job-description"> 
                <!--loop into each bullet point-->
                <xsl:for-each select="bullet-point">
                    <xsl:value-of select="statement"/>
                </xsl:for-each>
            </xsl:for-each>
        </xsl:for-each>
    </xsl:for-each>


    <!--education section-->
    <!--for education section's section name-->
    <xsl:value-of select="/resume/education-section/section-name"/>
    <!--loop into each institution name-->
    <xsl:for-each select="/resume/education-section/institution"> 
        <!--for institution name  -->
        <xsl:value-of select="name"/>
        <!--for institution city and state-->
        <xsl:value-of select="city"/>, <xsl:value-of select="state"/>
        <xsl:value-of select="country"/>
        <!--for degree of a particular institution-->
        <xsl:value-of select="degree"/>-<xsl:value-of select="expected-completion-date"/>
        <xsl:for-each select="bullet-point">
            <xsl:for-each select="statement" >
                <xsl:value-of select="."/>
            </xsl:for-each>
        </xsl:for-each>
    </xsl:for-each>


</xsl:template>

Профессиональный раздел всегда будет отображаться перед образовательным разделом. Я хочу разработать механизм, с помощью которого разделы могут быть изменены в xsl, например, если я хочу, чтобы информация об образовательном разделе отображалась сначала вместо профессиональной, используя какой-либо ввод, и мне не нужно делать это вручную. Как мне изменить файл xml или xsl, чтобы я мог изменить порядок каждого раздела во время выполнения в xsl, указанном выше?

Ответы [ 3 ]

1 голос
/ 22 ноября 2010

Эта таблица стилей:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:param name="pOrder" select="concat('contact-information|',
                                            'professional-experience-section|',
                                            'education-section')"/>
    <xsl:template match="institution/completed|
                         institution/end-date|
                         institution/ongoing|
                         education-section/enable|
                         professional-experience-section
                            /*[not(self::company)]|
                         custom-section|
                         additional-skills-section|
                         contact-information/zip|
                         contact-information/email|
                         job-title/ongoing" priority="1"/>
    <xsl:template match="text()">
        <xsl:value-of select="concat(.,'&#xa;')"/>
    </xsl:template>
    <xsl:template match="resume">
        <xsl:apply-templates>
            <xsl:sort select="string-length(
                                 substring-before($pOrder,
                                                  name()))"/>
        </xsl:apply-templates>
    </xsl:template>
    <xsl:template match="institution/city|company/city">
        <xsl:value-of select="concat(.,',')"/>
    </xsl:template>
    <xsl:template match="job-title/start-date">
        <xsl:value-of select="concat(.,' - ')"/>
    </xsl:template>
    <xsl:template match="institution/degree">
        <xsl:value-of select="concat(.,'-')"/>
    </xsl:template>
</xsl:stylesheet>

С этим правильно сформированным входом (resume корневой элемент), вывод:

Peter John
some place
some place2
some city
some state
some country
2121314144
Computer Sciences Corporation
New York,NY
United States
Senior Software Engineer
Aug 1996 - May 2010
C#, Visual Basic, Asp.net
Inspect completed work to ensure conformance to specifications, standards, and contract requirements.
Another Work Description.
Acme
Silver Spring,MD
United States
Manager
Jul 2010 - present
Report to management regarding the finances of establishment.
Prepare, examine, or analyze accounting records, financial statements, or other financial reports to assess accuracy, completeness, and conformance to reporting and procedural standards.
Prepare, examine, or analyze accounting records, financial statements, or other financial reports to assess accuracy, completeness, and conformance to reporting and procedural standards.
Analyst
Jul 2001 - Jan 2010
Study and rehearse roles from scripts in order to interpret, learn and memorize lines, stunts, and cues as directed.
Work closely with directors, other actors, and playwrights to find the interpretation most suited to the role.
EDUCATION
true
Allston Community College
Akron,MA
United States
Bachelor of Art in Marketing Candidate-Jan 2020
detail of what i did at the allston community college
Boston College
Boston,MA
United States
Bachelor of Science in Information Systems-Lorem Ipsum
Testing
Testing,PA
United States
Completed coursework towards Bachelor of Art in Marketing-Lorem Ipsum
Testing
Testing,PA
United States
Completed coursework towards Bachelor of Art in Marketing-Lorem Ipsum

Примечание : $pOrder param - последовательность с относительным порядком обработки resume children.

0 голосов
/ 22 ноября 2010

В следующем преобразовании используется внешний параметр (и его можно легко настроить для чтения из другого документа) требуемых разделов и их желаемого порядка :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

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

 <xsl:template match="/resume">

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

 <xsl:template match="contact-information">
    <xsl:value-of select="full-name"/>
    <xsl:value-of select="address_line_1"/>
    <xsl:value-of select="address_line_2"/>
    <xsl:value-of select="city"/>
    <xsl:value-of select="state"/>
    <xsl:value-of select="country"/>
    <xsl:value-of select="phone"/>
 </xsl:template>

 <xsl:template match="company">
  <!--for company name-->
  <xsl:value-of select="name"/>
  <xsl:value-of select="city"/>, <xsl:value-of select="state"/>
  <xsl:value-of select="country"/>
  <!--loop into job title-->
  <xsl:for-each select="job-title">
    <!--for job title-->
    <xsl:value-of select="title"/>
      <!--for job start date and job end date-->
      <xsl:value-of select="start-date"/> – <xsl:value-of
           select="end-date"/>
       <!--Loop into job description-->
       <xsl:for-each select="job-description">
          <!--loop into each bullet point-->
          <xsl:for-each select="bullet-point">
            <xsl:value-of select="statement"/>
          </xsl:for-each>
       </xsl:for-each>
    </xsl:for-each>
 </xsl:template>

 <xsl:template match="institution">
  <!--for institution name  -->
  <xsl:value-of select="name"/>
  <!--for institution city and state-->
  <xsl:value-of select="city"/>, <xsl:value-of select="state"/>
  <xsl:value-of select="country"/>
  <!--for degree of a particular institution-->
  <xsl:value-of select="degree"/>-<xsl:value-of select="expected-completion-date"/>
  <xsl:for-each select="bullet-point">
    <xsl:for-each select="statement" >
      <xsl:value-of select="."/>
    </xsl:for-each>
   </xsl:for-each>
 </xsl:template>

 <xsl:template match="education-section">
    <!--education section-->
    <!--for education section's section name-->
    <xsl:value-of select="section-name"/>
    <!--loop into each institution name-->
    <xsl:apply-templates select="institution"/>
 </xsl:template>
</xsl:stylesheet>

Примечание:

Я не исправил какую-либо конкретную обработку, которая была предоставлена ​​- просто сгруппировал ее в шаблоны и предоставил механизм заказа.Решение о том, как завершить презентацию, зависит от ФП (оригинальный постер).

В частности, большая часть кода все еще может быть уточнена путем группировки его в шаблоны, что позволит отделить код, упростив егои устранение зависимости и жестко закодированной информации.

0 голосов
/ 22 ноября 2010

Есть две отдельные таблицы стилей xsl;один, как указано выше, а другой с циклом

<xsl:value-of select="/resume/education-section/section-name"/>

перед циклом профессионального опыта.

Во время выполнения решите, какую таблицу стилей вы хотите использовать.

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

...