使用xslt在xml中进行条件检查



输入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,工程师和10(经验)将进入经验元素。

如果"经验"没有值,则默认为10。

在上面的输入XML中,将会有许多Employee详细信息。

这是xslt 的链接

请帮助解决上述问题

提前感谢

查看xsl:analyze-stringhttp://www.w3.org/TR/xslt20/#analyze-字符串,例如沿着的行

<xsl:template match="Employeedetail">
 <Employeedetail>
  <xsl:analyze-string="." regex="(w+)s+(w+(sw+)?)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>

未经测试,但应该为你指明正确的方向。

Maha,我建议您在XSLT1.0字符串函数上搜索。这类问题非常琐碎,不应该在StackOverflow中发布。是的,你可能是一个初学者,但这并不能阻止你使用谷歌。

以下是您的几个出发点:

  1. 看看http://www.w3schools.com/xpath/xpath_functions.asp
  2. 关于您的特定问题,请考虑函数string-bfore()和string-after()

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

相关内容

  • 没有找到相关文章