2013-02-28 1 views
2

존재하지 않는 소스 XML에서 속성 (또는 요소)에 액세스하려고하면 XSLT가 오류를 던질 수있는 쉬운 방법을 찾고 있습니다. 속성 또는 요소가없는 경우 XSLT에서 오류를 발생시키는 방법이 있습니까?

<xsl:if test="not(attribute_to_use)"> 

<xsl:message terminate="yes"> 

    <xsl:text>error message</xsl:text>      

</xsl:message> 

</xsl:if> 

<!-- do something --> 

<xsl:attribute name="new_attribute"><xsl:value-of select="attribute_to_use" /></xsl:attribute> 

나는 코드의 많은 속성을 확인하는 것을 발견 - 당신이 이것을 특히 : 예를 들면 - 속성이 존재하고 그렇지 않은 경우 수동으로 오류가 발생하는 경우 현재 제가하는 일은 먼저 확인입니다 모든 속성에 대해. XSLT에서이 작업을 수행 할 수있는 다른 방법이 있습니까? 예 : "기존 속성에 중단"과 같은 지시문을 설정하는 등의 방법이 있습니까?

이 작업을 수행하는 한 가지 방법은 DTD 또는 스키마를 사용하는 것입니다. 직접 XSLT 방식이 없다면이 방법으로 수행 할 것입니다.

고맙습니다.

답변

2

XSLT 1.0은 노드와 일치하는 템플릿을 기반으로하므로 특정 속성이없는 모든 요소를 ​​일치시키기위한 템플릿을 작성할 수 있습니다.

예를 들어, 다음 템플리트는 @id 속성이없는 것과 같은 모든 요소와 일치합니다.

<xsl:template match="*[not(@id)]"> 
    <xsl:message terminate="yes"> 
     <xsl:value-of select="concat('Attribute @id does not exist in element ', name())" /> 
    </xsl:message> 
</xsl:template> 

그래서 당신은 특정 요소가이 같은 일치 식 무언가에 사용할 수있는 특정 속성이 있음을 부과하려는 경우 : 요소 [하지 (@id)] |를 element2에 [없는 (@a)] 등 그리고 그들은 그 속성을 가질 경우이를 처리하는 각 요소에 대해 다른 템플릿을 작성 :

<xsl:template match="Element[not(@id)]|Element2[not(@a)]"> 
    <!-- Throw error message --> 
</xsl:template> 

<xsl:template match="Element"> 
    <!-- Process Elements which have an @id attribute --> 
</xsl:template> 

<xsl:template match="Element2"> 
    <!-- Process Elements which have an @a attribute --> 
</xsl:template> 

당신이 (매우 복잡하지 않아야 함) 필요에 따라 당신은 특정 요소가이 오류가 발생하는 복잡한로 템플릿을 작성할 수 '속성 보유', '속성 값이 유효하지 않음', '자녀 수는 5'등의 특정 속성이 있습니다.

당신이 달성하고자하는 일반적인 방법으로 구현하는 방법에 대한 아이디어를 얻으려는 희망.

2

XPath 2.0에서 노드 $ N을 사용하고 그것이 존재하지 않으면 실패 할 때마다 정확히 $ N에 대한 참조를 $ N 또는 하나 이상의 함수 호출로 둘러 쌉니다. ($ N).

관련 문제