Czy istnieje Nazwa elementu XSLT?
W XSLT jest
<xsl:value-of select="expression"/>
Aby uzyskać wartość elementu, ale czy jest coś, aby wybrać nazwę znacznika elementu?
W takiej sytuacji:
<person>
<!-- required stuff -->
<name>Robert</name>
<!-- optional stuff, free form for future extension.
Using XMLSchema's xsd:any -->
<profession>programmer</profession>
<hobby>photography</hobby>
</person>
<xsl:for-each select="person">
<xsl:tag-of select="."/> : <xsl:value-of select="."/>
</xsl:for-each>
Aby uzyskać wynik w ten sposób:
name : Robert profession : programmer hobby : photography
Oczywiście powyższy XSLT nie będzie kompilowany ponieważ
<xsl:tag-of select="expression"/>
Nie istnieje. Ale jak można to zrobić?
5 answers
To da ci bieżącą nazwę elementu (nazwę znacznika)
<xsl:value-of select ="name(.)"/>
OP-Edit: to też załatwi sprawę:
<xsl:value-of select ="local-name()"/>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-25 09:22:10
Nikt nie wskazał subtelnej różnicy w semantyce funkcji name()
oraz local-name()
.
-
name(someNode)
zwraca pełną nazwa węzła, która obejmuje przedrostek i dwukropek w przypadku węzła jest elementem lub atrybutem. -
local-name(someNode)
zwraca tylko lokalnej nazwy węzła, oraz że nie zawiera przedrostka i dwukropka w przypadku gdy węzeł jest elementem lub atrybut.
Dlatego w sytuacjach, w których nazwa może należą do dwóch różnych przestrzeni nazw, należy użyć funkcji name()
, aby te nazwy były nadal rozróżniane.
I, BTW, można określić obie funkcje bez żadnego argumentu :
name()
jest skrótem od name(.)
local-name()
jest skrótem od local-name(.)
Na koniec , pamiętaj, że nie tylko elementy i atrybuty mają nazwy, te dwie funkcje mogą być również używane na PIs i na nich są identyczne).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-25 14:53:17
<xsl:for-each select="person">
<xsl:for-each select="*">
<xsl:value-of select="local-name()"/> : <xsl:value-of select="."/>
</xsl:for-each>
</xsl:for-each>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-30 13:09:24
Dla zainteresowanych nie ma:
<xsl:tag-of select="."/>
Można jednak ponownie utworzyć tag / element, wybierając:
<xsl:element name="{local-name()}">
<xsl:value-of select="substring(.,1,3)"/>
</xsl:element>
Jest to przydatne w szablonie xslt, który na przykład obsługuje formatowanie wartości danych dla wielu różnych elementów. Jeśli nie znasz nazwy elementu, nad którym pracujesz i nadal możesz wypisać ten sam element i zmodyfikować wartość, jeśli zajdzie taka potrzeba.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-19 04:21:01
<xsl:value-of select="name(.)" /> : <xsl:value-of select="."/>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-30 13:09:50