1

入力XML

<Employer>
     <Employeedetail>Sam SR Engineer 10%</ Employeedetail >
     <Employeedetail>Sam SR 10%</ Employeedetail >
     <Employeedetail>Sam SR</ Employeedetail >
</ Employer >

以下は出力入力XMLです

<Employer>
 < Employeedetails >
  < Employeedetail1>
    < Employeedetail >
       <Name>Sam</ Name >
       <Grade> SR Engineer </ Grade >
       <Experience>10</ Experience >
    </ Employeedetail >
  </ Employeedetail1>
 </ Employeedetails>
</ Employer >

 <Employer>
 < Employeedetails >
  < Employeedetail1>
    < Employeedetail >
       <Name>Sam</ Name >
       <Grade>SR</ Grade >
       <Experience>10</ Experience >
    </ Employeedetail >
  </ Employeedetail1>
 </ Employeedetails>
</ Employer >

 <Employer>
 < Employeedetails >
  < Employeedetail1>
    < Employeedetail >
       <Name>Sam</ Name >
       <Grade>SR</ Grade >
       <Experience>10</ Experience >
    </ Employeedetail >
  </ Employeedetail1>
 </ Employeedetails>
</ Employer >

スタックオーバーフローの人々は、スペースが3つある場合、出力を取得します。

しかし、ここで再び少しひねりがあります。SrEngineerのグレードを調べると、これはグレードになりますが、私が持っているコードはSRをGrade要素に表示し、Engineerと10(Experience)はExperience要素に含まれます。

Experienceの値がない場合、デフォルトで10になります。

上記の入力XMLには、従業員の詳細がいくつか表示されます。

これがそのxsltへのリンクです

上記の質問にご協力ください

前もって感謝します

4

3 に答える 3

1

xsl:analyze-string http://www.w3.org/TR/xslt20/#analyze-stringを調べてください。

<xsl:template match="Employeedetail">
 <Employeedetail>
  <xsl:analyze-string="." regex="(\w+)\s+(\w+(\s\w+)?)\s+(\d+)">
    <xsl:matching-substring>
       <Name><xsl:value-of select="regex-group(1)"/></Name>
       <Grade><xsl:value-of select="regex-group(2)"/></Grade>
       <Experience><xsl:value-of select="regex-group(4)"/></Experience>
    </xsl:matching-substring>
  </xsl:analyze-string>
 </Employeedetail>
</xsl:template>

テストされていませんが、正しい方向を示す必要があります。

于 2012-07-11T10:03:25.570 に答える
0

このXSLT1.0変換

<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:template match="Employeedetail">
  <xsl:variable name="vExp" select=
   "substring(., string-length()-2, 2)"/>
     <Employer>
      <Employeedetails>
        <Employeedetail1>
            <Employeedetail>
             <name><xsl:value-of select="substring-before(., ' ')"/></name>
             <grade>
               <xsl:value-of select=
               "substring-before(substring-after(., ' '), $vExp)"/>
             </grade>
             <experience><xsl:value-of select="$vExp"/></experience>
            </Employeedetail>
        </Employeedetail1>
      </Employeedetails>
     </Employer>
 </xsl:template>
</xsl:stylesheet>

提供されたXMLドキュメントに適用した場合:

<Employer>
    <Employeedetail>Sam SR Engineer 10%</Employeedetail>
</Employer>

必要な正しい結果を生成します

<Employer>
   <Employeedetails>
      <Employeedetail1>
         <Employeedetail>
            <name>Sam</name>
            <grade>SR Engineer </grade>
            <experience>10</experience>
         </Employeedetail>
      </Employeedetail1>
   </Employeedetails>
</Employer>
于 2012-07-11T13:34:00.630 に答える
0

マハ、XSLT 1.0 文字列関数についてググることをお勧めします。この種の問題は本当に些細なことなので、StackOverflow に投稿するべきではありません。はい、あなたは初心者かもしれませんが、Google の使用を止めるわけではありません。

以下にいくつかの出発点を示します。

  1. http://www.w3schools.com/xpath/xpath_functions.aspを見てください。
  2. 特定の質問に関連して、関数 string-before() および string-after() を検討してください
于 2012-07-11T13:29:26.593 に答える