W XSLT jest
<xsl:value-of select="expression"/>
aby uzyskać wartość elementu, ale czy jest coś do wybrania nazwy 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ć takie wyniki:
name : Robert profession : programmer hobby : photography
Oczywiście powyższy XSLT nie skompiluje się, ponieważ
<xsl:tag-of select="expression"/>
nie istnieje. Ale jak można to zrobić?
Odpowiedzi:
To da ci aktualną nazwę elementu (nazwę tagu)
OP-Edit: To również załatwi sprawę:
źródło
Nikt nie wskazał na subtelną różnicę w semantyce funkcji
name()
ilocal-name()
.name(someNode)
zwraca pełną nazwę węzła, która zawiera przedrostek i dwukropek w przypadku, gdy węzeł jest elementem lub atrybutem.local-name(someNode)
zwraca tylko lokalną nazwę węzła i nie zawiera przedrostka i dwukropka w przypadku, gdy węzeł jest elementem lub atrybutem.Dlatego w sytuacjach, gdy nazwa może należeć do dwóch różnych przestrzeni nazw, należy użyć
name()
funkcji, aby te nazwy były nadal rozróżniane.I przy okazji, można określić obie funkcje bez żadnego argumentu :
name()
to skrót odname(.)
local-name()
to skrót odlocal-name(.)
Na koniec pamiętaj, że nie tylko elementy i atrybuty mają nazwy, te dwie funkcje mogą być również używane na PI i na nich są identyczne).
źródło
źródło
Dla zainteresowanych nie ma:
Możesz jednak odtworzyć tag / element, przechodząc:
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 wyprowadzić ten sam element i zmodyfikować wartość, jeśli zajdzie taka potrzeba.
źródło
źródło