XSLT에는
<xsl:value-of select="expression"/>
요소의 값을 얻으려면 요소의 태그 이름을 선택하는 것이 있습니까?
다음과 같은 상황에서 :
<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>
다음과 같은 출력을 얻으려면 :
name : Robert profession : programmer hobby : photography
물론 위의 XSLT는 컴파일되지 않습니다.
<xsl:tag-of select="expression"/>
존재하지 않습니다. 그러나 이것은 어떻게 할 수 있습니까?
답변
그러면 현재 요소 이름 (태그 이름)이 제공됩니다.
<xsl:value-of select ="name(.)"/>
OP-Edit : 이것은 또한 트릭을 수행합니다.
<xsl:value-of select ="local-name()"/>
답변
아무도 함수 name()
와 의 의미론에서 미묘한 차이를 지적하지 않았습니다 local-name()
.
name(someNode)
노드의 전체 이름을 반환하며 노드가 요소 또는 속성 인 경우 접두사와 콜론을 포함합니다.local-name(someNode)
노드의 로컬 이름 만 반환하며 노드가 요소 또는 속성 인 경우 접두사와 콜론을 포함하지 않습니다.
따라서 이름이 두 개의 서로 다른 네임 스페이스에 속할 수있는 상황에서 name()
이러한 이름을 계속 구별 하려면 함수를 사용해야합니다 .
그리고 BTW, 인수없이 두 함수를 모두 지정할 수 있습니다 .
name()
의 약어입니다. name(.)
local-name()
의 약어입니다. local-name(.)
마지막으로 , 요소와 특성에는 이름이있을뿐만 아니라이 두 함수는 PI에서도 사용할 수 있으며이 두 함수는 동일합니다.
답변
<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>
답변
관심있는 사람들에게는 다음이 없습니다.
<xsl:tag-of select="."/>
그러나 다음으로 이동하여 태그 / 요소를 다시 만들 수 있습니다.
<xsl:element name="{local-name()}">
<xsl:value-of select="substring(.,1,3)"/>
</xsl:element>
이것은 예를 들어 많은 다른 요소에 대한 데이터 값 형식화를 처리하는 xslt 템플릿에서 유용합니다. 작업중인 요소의 이름을 모르는 경우에도 동일한 요소를 출력하고 필요한 경우 값을 수정할 수 있습니다.
답변
<xsl:value-of select="name(.)" /> : <xsl:value-of select="."/>