source

요소의 XSLT 이름이 있습니까?

manycodes 2023. 11. 7. 20:59
반응형

요소의 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-편집:이 방법으로도 효과가 있습니다.

<xsl:value-of select ="local-name()"/>

아무도 함수의 의미론의 미묘한 차이를 지적하지 않았습니다. 그리고.

  • name(someNode)노드의 전체 이름을 반환하며 노드가 요소이거나 속성인 경우 접두사와 콜론이 포함됩니다.
  • local-name(someNode)는 노드의 로컬 이름만 반환하며 노드가 요소 또는 속성인 경우 접두사와 콜론은 포함하지 않습니다.

따라서 이름이 두 개의 다른 네임스페이스에 속할 수 있는 상황에서는 다음을 사용해야 합니다.name()이 이름들이 여전히 구별될 수 있도록 기능합니다.

그리고, BTW, 논쟁 없이함수를 모두 지정하는 것이 가능합니다.

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="."/>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
    <xsl:template match="person">
        <xsl:for-each select="*">
            <xsl:text>
       </xsl:text>
            <xsl:value-of select="local-name()"/> : <xsl:value-of select="."/>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

언급URL : https://stackoverflow.com/questions/585261/is-there-an-xslt-name-of-element

반응형