2014-05-21 2 views
-2
<Instance xsi:type="ButtonConfig"> 
    <Name>ExitButton</Name> 
    <Height>89</Height> 
    <Width>120</Width> 
    <Margin> 
     <All>-1</All> 
     <Bottom>0</Bottom> 
     <Left>400</Left> 
     <Right>0</Right> 
     <Top>11</Top> 
    </Margin>   
</Instance> 

위의 XML에서 Left Margin을 420으로 변경해야합니다. XSLT를 사용하여 어떻게합니까?XSLT를 사용하여 XML 노드 업데이트하기

답변

3

이것은 입력 문서를 단순히 복제하는 "identify transform"입니다. <Name/>ExitButton 함유 갖는 <Instance/> 내에 <Margin/><Left/>의 출력을 무시하면서

여기서 대부분 항등 변환을 수행하는 간단한 스타일이다. 참고 입력 XML에 네임 스페이스 정의를 추가해야만합니다. xsi은 문서의 다른 위치에 있다고 가정합니다.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="Margin/Left[ancestor::Instance/Name[text()='ExitButton']]"> 
    <Left>420</Left> 
    </xsl:template> 
</xsl:stylesheet> 
+0

인스턴스 노드가 여러 번 반복됩니다. 이름은 각 인스턴스 노드에서 고유합니다. –

+1

@WPFLearner : 당신의 질문에 당신이 제공해야 할 세부 사항입니다. 특정 이름과 일치하도록 스타일 시트를 업데이트했습니다. –

+0

그것은 작동합니다. 감사. –

3

모든 XSLT 자습서에서 다음과 같이 알려줍니다. 이와 같이 간단한 경우, 본질적으로 변경되지 않은 ID 스타일 시트로 시작한 다음 예외를 구현하는 템플릿을 추가하십시오.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

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

    <xsl:template match="Margin/Left"> 
    <xsl:copy> 
     <xsl:text>420</xsl:text> 
    </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 
+0

인스턴스 노드가 여러 번 반복됩니다. 이름은 각 인스턴스 노드에서 고유합니다. –

+3

질문을 개선 한 후 질문에 답변 할 수있는 세부 정보를 얻으십시오. 또는 내가 스케치하고 확장 한 것으로 시작하십시오. – keshlam

관련 문제