Input XML
<Employer>
<Employeedetail>Sam SR Engineer 10%</ Employeedetail >
<Employeedetail>Sam SR 10%</ Employeedetail >
<Employeedetail>Sam SR</ Employeedetail >
</ Employer >
Di seguito è riportato l'XML di input di output
<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 >
Le persone provenienti dall'eccesso di stack hanno aiutato se avessimo tre nodi sperati nello spazio otterremo l'output
Ma qui c'è una leggera svolta di nuovo se tuguarda nel grado Sr Engineer questo entrerà nel grado, ma il codice che ho mostrerà SR nell'elemento Grade e Engineer e 10 (Experience) entreranno nell'elemento Experience.
Se non c'è alcun valore per Esperienza che ha assunto di default 10.
Nel codice XML di input sopra riportato ci sarà il numero di dettagli dei dipendenti che arriverà.
Si prega di aiuto per la domanda di cui sopra
Grazie in anticipo
risposte:
1 per risposta № 1Guardare dentro xsl:analyze-string
http://www.w3.org/TR/xslt20/#analyze-string per esempio. lungo le linee di
<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>
Non testato, ma dovrebbe indirizzarti nella giusta direzione.
0 per risposta № 2
Maha, ti consiglio google su XSLT 1.0 funzioni di stringa. Questo tipo di problema è davvero banale e non dovresti postare in StackOverflow. Sì, potresti essere un principiante, ma questo non ti impedisce di usare Google.
Ecco un paio di punti di partenza per te:
- Guarda a http://www.w3schools.com/xpath/xpath_functions.asp
- In relazione alla tua particolare domanda, considera le funzioni string-before () e string-after ()
0 per risposta № 3
Questa trasformazione 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>
se applicato sul documento XML fornito:
<Employer>
<Employeedetail>Sam SR Engineer 10%</Employeedetail>
</Employer>
produce il risultato desiderato e corretto:
<Employer>
<Employeedetails>
<Employeedetail1>
<Employeedetail>
<name>Sam</name>
<grade>SR Engineer </grade>
<experience>10</experience>
</Employeedetail>
</Employeedetail1>
</Employeedetails>
</Employer>