2010-06-27 8 views
46

저는 XML과 XSL 파일 사용법을 배우고 있습니다. 이 스탠드를 무엇XSL xsl : template match = "/"

xsl:template match="/" 

:에 XSL 파일에서 나는 다음과 같은 용어를 발견? / 대신 무엇을 사용할 수 있습니까? / 대신 table 또는 다른 HTML 태그를 쓸 수 있습니까?

답변

7

match 속성은 템플릿 변형이 적용될 부분을 나타냅니다. 그 특별한 경우 "/"는 XML 문서의 루트를 의미합니다. match 속성에 입력해야하는 값은 XPath 표현식이어야합니다. XPath는 대상 XML 파일의 특정 부분을 참조 할 때 사용해야하는 언어입니다.

다른 어떤 것을 match 속성에 넣을 수 있는지에 대한 의미있는 이해를 얻으려면 xpath가 무엇이고 어떻게 사용하는지 이해해야합니다. 나는 당신이 대답의 맨 아래에 youat을 위해 제공 한 링크를 보길 권한다.

"/"대신 "table"이나 다른 html 태그를 쓸 수 있습니까?

예. 가능합니다. 그러나 이것은 정확히 당신이하려는 일에 달려 있습니다. 대상 xml 파일에 HMTL 요소가 들어 있고이 xsl : template를 triyng로 적용하면 table, div 또는 anithing을 사용하는 것이 좋습니다. 여기

몇 가지 링크 :

+2

이 답변은 실제로 올바르지 않습니다. 모든 XPath 표현식이 유효한 일치 패턴으로 지정 될 수있는 것은 아닙니다. –

+1

필자는 동의하지만 초보자는 XPath를 사용하여 정의 된대로 일치 패턴을 고려하는 것이 더 바람직하다고 생각합니다. – Koynov

108

<xsl:template> 명령의 match 속성의 값은 해야합니다 일치 패턴.

일치 패턴은 가능한 모든 XPath 표현식 집합의 부분 집합을 형성합니다. 첫 번째, 자연스런 제한은 일치 패턴이 노드 집합을 선택해야한다는 것입니다. 다른 제한 사항이 있습니다. 특히, 역 단계 축은 위치 단계에서 허용되지 않습니다 (그러나 술어 내에서 지정할 수 있음). 또한 XSLT 1.0에서는 변수 또는 매개 변수 참조가 허용되지 않지만 XSLT 2.x에서는 이러한 참조를 사용할 수 있습니다.

/은 XPath에서 루트 또는 문서 노드를 나타냅니다. XPath 2.0 (XSLT 2.x)에서는 document-node()이라고 쓸 수 있습니다.

일치 패턴에 // abbreviation을 포함 할 수 있습니다. 일치하는 패턴의

예 :

<xsl:template match="table"> 

table라는 이름의 모든 요소에 적용 할 수 있습니다.

<xsl:template match="x/y"> 

y는 부모가 x라는 요소라는 임의의 요소에 적용될 수있다.

<xsl:template match="*"> 

은 모든 요소에 적용 할 수 있습니다.

<xsl:template match="/*"> 

은 XML 문서의 맨 위 요소에만 적용 할 수 있습니다.

<xsl:template match="@*"> 

은 모든 속성에 적용 할 수 있습니다.

<xsl:template match="text()"> 

은 모든 텍스트 노드에 적용 할 수 있습니다.

<xsl:template match="comment()"> 

은 모든 주석 노드에 적용 할 수 있습니다.

<xsl:template match="processing-instruction()"> 

은 임의의 처리 명령 노드에 적용될 수있다.

<xsl:template match="node()"> 

은 요소, 텍스트, 설명 또는 처리 명령 모두 노드에 적용 할 수 있습니다.

+0

알고있는 데 도움이되었으며 다른 출처에서 거의 언급되지 않았습니다. "노드가 가능한 컨텍스트와 관련하여 표현식으로 패턴을 평가 한 결과의 구성원 인 경우 노드가 패턴과 일치하며 가능한 컨텍스트는 컨텍스트 노드는 일치되는 노드 또는 조상 중 하나입니다. " (https://www.w3.org/TR/xslt#patterns) –

+0

@NiklasPeter, 예, 여기 Spec은 XPath 표현식을 평가하는 방법을 조금 설명합니다. 따라서 모든 XSLT 프로그래머가 예상된다는 것을 언급해야합니다 XPath를 아는가? 모든 사람들이이 전제 조건을 잘 알고 있다고 생각합니다. –

+0

이 인용문을 추가 한 이유는 마지막 부분입니다. "가능한 컨텍스트는 컨텍스트 노드가 일치하는 노드이거나 조상 중 하나입니다."나는 모든 조상 노드를 시도하는 것이 XSLT에만 국한된 것이지 XPath에 익숙하지 않은 모든 사람들이 알고있는 것은 아니라고 생각합니다. –

34

XML 문서의 루트 (또는 문서 노드)가 최상위 요소가 아닌 XML을 처음 접하는 사람들에게 혼란을주기 때문에 주목할 가치가 있습니다. 그것은 최상위 요소의 부모입니다. 최상위 요소가 상위를 가질 수없는 것처럼 보이기 때문에 혼란 스럽습니다. 최고 수준이 아닌가요?

그러나 이것 좀 봐, 잘 구성된 XML 문서 :

<?xml-stylesheet href="my_transform.xsl" type="text/xsl"?> 
<!-- Comments and processing instructions are XML nodes too, remember. --> 
<TopLevelElement/> 

이 문서의 루트는 세 자녀가 있습니다 처리 명령, 주석, 및 요소를. 당신이 쓰고 싶다 경우

그래서, 예를 들어, 즉 그 주석을 제거하지만, 문서에 다른 곳에서 나오는 의견에 남아있어 변환, 당신은 변환 신원이 추가 것 :

<xsl:template match="/comment()"/> 

심지어 더 간단하고 (더 일반적으로 유용합니다), 이름에 관계없이 문서의 최상위 요소와 일치하는 XPath 패턴은 다음과 같습니다 : /*.

+3

나는이 아침에 좋은 덩어리를이 문서/뿌리 원소 이분법으로 완전히 당황스럽게 보냈다. 저는 XML과 DOM을 수년간 사용해 왔지만 여전히 이와 같은 것들을 떠올리게합니다! –

+1

이 미묘하지만 초등 구별에 대해 알려 주셔서 감사합니다. 나는 너무 오랫동안 잊어 버렸습니다! :) – Chris