[xml] 요소의 XSLT 이름이 있습니까?

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="."/>


답변