2010-06-24 3 views
0


우리는 값에 따라 xml 특성을 표시하기 위해 XSLT를 사용하고 있습니다. 우리는 C#을 사용하여 서버 측에서 처리 할 수 ​​있습니다. 그러나 우리는 XSLT를 통해이를 달성하는 방법을 얻지 못하고 있습니다.
샘플 xml을 다음과 같이 사용하고 있습니다.
XSLT를 사용하여 속성 값에 따라 속성을 표시하는 방법은 무엇입니까?

<BookInfo> 
    <BookTable show="Book 1" > 
     <book id="book1" value="Book 1" /> 
     <book id="book2" value="Book 2" /> 
    </BookTable> 
</BookInfo> 


우리는 "쇼"속성 값을 읽고 값에 따라, 우리는 노드 정보를 표시 할 싶어요.
XSLT를 사용하여이 작업을 수행하도록 도와주세요. 미리 감사드립니다.

수정 된 xml;

<Book> 
    <Info> 
    <Item name="Item1" type="DropDown" defaultValue="Two" values="One,Two,Three" /> 
    <Item name="One" type="Label" value="some text" /> 
    <Item name="Two" type="TextBox" value="another text" /> 
    <Item key="Three" name="CheckBox" value="true" /> 
    </Info> 
</Book> 

불행히도 xml 형식이 변경되었습니다. 이제이 경우 Item1 defaultValue는 2이므로 이름이 "2"인 노드가 반환되어야합니다.
두 번째 예

<xsl:template match="BookTable"> 
    <xsl:value-of select="book[@value = current()/@show]"/> 
</xsl:template> 

EDIT 실제 노드에 점을 표시 할 필요가 있음을, 내가 <Item name="Item1"> 노드가 항상있다 있으리라 믿고있어, 매우 명확하지 않다 :

+0

두 개 이상의 아이템을 어떻게 모델링합니까? 같은 레벨이지만 스키마가 다른 동일한 요소 이름을 사용하고 있습니다! –

+0

@Alejandro : 예, 실제로이 작업이 필요합니다. xml을 파싱하는 동안 조건에 따라 노드를 표시해야합니다. –

답변

1

이 같은이야 . 는 XPath에서

<xsl:template match="Info"> 
    <xsl:copy-of select="Item[@name = Item[@name='Item1']/@defaultValue]" /> 
</xsl:template> 

당신은 당신의 입력 XML의 속성 값에 얻을 수있는 @이 필요합니다.
Item[@name = ...]은 name 속성의 값이 지정된 값과 동일한 항목을 선택합니다.
current()은 템플릿이 처리중인 현재 노드에 대한 액세스를 제공합니다. 보통 @show은 선택중인 노드에 대해 해당 속성의 값을 선택해야합니다. 예 : Item[@name = @defaultValue]은 'name'및 'defaultValue'값이 동일한 항목을 선택합니다.

+0

안녕하세요 한스, 답장을 보내 주셔서 감사합니다. 하지만 불행히도 XML 형식이 변경되었습니다. –

+0

@Vijay, 나는 대답을 연장했다. –

+0

'match = "Item [@name = ../Item/@ defaultValue]"'이이 스키마를 신뢰할 수 있다면 일반적인 방법이라고 말할 수 있습니다. 질문에 대한 내 의견을 참조하십시오. –

관련 문제