输入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-string
http://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中发布。是的,你可能是一个初学者,但这并不能阻止你使用谷歌。
以下是您的几个出发点:
- 看看http://www.w3schools.com/xpath/xpath_functions.asp
- 关于您的特定问题,请考虑函数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>