2014-08-29 2 views
0

내 요청에 약 500 개의 하위 요소가 있고 해당 요소에는 속성 ID가 있습니다. id는 선택적 요소입니다. 벨로우 코드 스 니핑을 사용하여 요청 ID 속성을 변환했습니다.XSLT에서 id 특성을 확인하십시오.

<xsl:if test="@id"> 
    <xsl:attribute name="id"> 
     <xsl:value-of select="@id" /> 
    </xsl:attribute> 
</xsl:if> 

모든 장소에 영향을 일반적인 장소에서 <xsl:if test="@id"> 검증을 할 수있는 방법이 있습니까. 그렇지 않으면 나는 모든 곳에서 이것을 점검해야한다.

제발 나에게 조언 해주세요. 너보다 ...

+0

그건 나에게 의미가 없습니다. 왜'id' 속성이 있는지 테스트 한 다음, 이미 있다면 id 속성을 만들어야합니다. 이 목적을 설명해주십시오. 또한 더 많은 XSLT 코드, 입력 XML, 출력 및 아마도 XSD ('xsd'로 질문 태그를 지정하고 유효성을 언급 한 이후)를 보여줍니다. –

+0

없이 사용했다면, 요청한 요소에 내 변환에 id 속성이없는 요소가 있습니다.이 요소는 value가없는 id를가집니다.이 . 요청에 없다면 id 속성을 생성하고 싶지 않습니다. 그 때문에 조건 인 경우 테스트를 사용했습니다. – user3496599

+0

@Mathias Müller – user3496599

답변

1

이 스 니펫은 본질적으로 입력에서 출력으로 id 속성을 복사하고, 그렇지 않으면 아무것도 수행하지 않습니다. 선택된 노드 집합이 비어있는 경우이 모든 조각이 copy-of 이후

<xsl:copy-of select="@id"/> 

로 대체 될 수있는 것은 아무것도하지 않는다.

1

코드가 이미있는 것을 복사하는 것 외에 다른 작업을 수행하고 있지 않습니다. 어떤 경우

, 당신이 id 속성을 가진 모든 요소에 변환을 적용 할 경우, 예를 들어 속성과 일치하는 템플릿, 쓰기 :

<xsl:template match="@id"> 
    <xsl:attribute name="new-id"> 
     <xsl:value-of select="." /> 
    </xsl:attribute> 
</xsl:template> 

이 기존 값을 유지하고됩니다 특성의 이름을 바꿉니다.

1

일반적으로 당신은 신원 변환 템플릿

<xsl:template match="@* | node()" mode="#all"> 
    <xsl:copy> 
    <xsl:apply-templates select="@* , node()" mode="#current"/> 
    </xsl:copy> 
</xsl:template> 

와 스타일 시트를 시작할 것이다 사본 노드에 의해 레벨, 노드에 의해 모든 수준. 그런 다음 특수 처리가 필요한 요소 및/또는 속성에 대한 템플릿을 추가 할 수 있습니다.

요소 용 템플릿이 <xsl:apply-templates select="@*"/> 또는 <xsl:apply-templates select="@id"/> 일 때 속성이 복사됩니다.

요소를 변형하려면 예를 들어 템플릿을 추가하십시오.

<xsl:template match="/Address"> 
    <Add> 
    <xsl:apply-templates select="@* , node()"/> 
    </Add> 
</xsl:template> 
+0

' \t \t \t \t '이것은 내 코드이고 입력 XML은'

\t입니다.ABC
'하지만 출력에 속성 ID가 생성되지 않습니다. – user3496599

+0

'mode = "# all"'및'mode = "# current"'를 적어 둡니다. 요소를 변경하는 경우 apply-templates를 수행해야합니다. 나는 그것을 편집하고 보여줄 것이다. –

+0

"mode ="# all "및 mode ="# current "를 사용하면 벨로우 오류가 발생합니다. 값이 QName이거나 공백으로 구분 된 QName이어야하는 속성의 값은 '#all' ' FATAL ERROR : '스타일 시트를 컴파일 할 수 없습니다.' – user3496599

관련 문제