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 >

如果我们有三个空间分散的节点,他们会帮助堆栈溢出的人,我们将获得输出

但是,如果您查看 Sr Engineer 等级,这将再次进入等级,但我所拥有的代码将在 Grade 元素中显示 SR,而 Engineer 和 10(经验)将在 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

这个 XSLT 1.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

Maha,我建议您在 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 回答