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 това ще влезе в клас, но кодът, който имам ще покаже SR в класа елемент и инженер и 10 (опит) ще дойде в елемента Опит.
Ако няма стойност за Опитът, който по подразбиране е взел 10.
В горния XML вход ще има брой подробности за служителя, които ще дойде.
Моля, помогнете за горния въпрос
Благодаря предварително
Отговори:
1 за отговор № 1Поглеждам в xsl:analyze-string
http://www.w3.org/TR/xslt20/#analyze-string например по подобие на
<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>
Не тествана, но трябва да ви насочи в правилната посока.
0 за отговор № 2
Маха, предлагам ви google за XSLT 1.0 низови функции. Този вид проблем е наистина доста незначителен, че не трябва да публикувате в StackOverflow. Да, може да сте начинаещ, но това не ви пречи да използвате Google.
Ето няколко отправна точка за вас:
- Погледни http://www.w3schools.com/xpath/xpath_functions.asp
- Във връзка с вашия конкретен въпрос, помислете за функциите string-before () и string-after ()
0 за отговор № 3
Това преобразуване на 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>