2010-06-25 5 views
11

xslt에서 새로운 기능입니다. 나는 다음과 같은 문제가있다. 특정 요소 (예 : div)에서 특정 속성 (예제에서는 theAttribute)을 제거하려면 XML 내에서 필요합니다. 즉 xslt를 사용하여 특정 xml 요소에서 특성을 제외하십시오.

<html> 
    <head>...</head> 
    <body> 
     <div id="qaz" theAtribute="44"> 
     </div> 
     <div id ="ddd" theAtribute="4"> 
     <div id= "ggg" theAtribute="9"> 
     </div> 
     </div> 
     <font theAttribute="foo" /> 
    </body> 
</html> 

가 theAtribute 속성

<html> 
    <head>...</head> 
    <body> 
     <div id="qaz"> 
     </div> 
     <div id ="ddd"> 
     <div id= "ggg"> 
     </div> 
     </div> 
     <font theAttribute="foo" /> 
    </body> 
</html> 

가 제거되었는지 될. 나는 이것을 발견했는데, http://www.biglist.com/lists/xsl-list/archives/200404/msg00668.html에 기반하여 적절한 해결책을 찾으려고 시도했다. 선택하는 경우

<xsl:template match="@theAtribute" />

전체 문서에서 삭제

... 그리고 다른 경기처럼, 등 아무것도 당신이 나를 도와주세요 수 :-(? 그것은 나에게 사소한 소리 .. 일하지 하지만, XSLT와 함께, 난 그냥 @theAtribute?

그렇다면없이,

은? 사전

작동하지 않습니다 무엇
+0

, 당신은 코드를 선택하고 편집 패널의 상단에있는 "010101"버튼을 클릭하거나 텍스트 4 공간 들여 쓰기를 할 수 있습니다. –

답변

22

에 여러분 모두 감사합니다 같은 내용을 원하십니까 ... 전혀 대처할 수없는, 스타일 시트가 있는지 확인하십시오. 당신은 단지 @theAtribute 특정 억제하려면

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <!--empty template suppresses this attribute--> 
    <xsl:template match="@theAtribute" /> 
    <!--identity template copies everything forward by default--> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

, 당신은 일치 기준보다 구체적으로 만들 수 있습니다 @theAtribute의 빈 템플릿뿐만 아니라 출력에 다른 사본의 모든 정체성 템플릿을 가지고있다. 제거 할 경우

<xsl:template match="*[@id='qaz']/@theAtribute" /> 

:

<xsl:template match="@theAtribute[../@id='qaz']" /> 

또는이 템플릿 : 만 @id="qaz" 년대 div에서 해당 속성을 제거하고 싶다면 예를 들어, 당신은이 템플릿을 사용할 수 있습니다 @theAttribute 모두 div 개의 요소로 변경 한 다음 일치 식을 다음으로 변경하십시오.

<xsl:template match="div/@theAtribute" /> 
+0

안녕하세요,이 두 사람도 제가 두려웠지만 실제로는 도움이되지 않았습니다. 첫 번째 것은 모든 곳에서 "theAtribute"를 제거합니다 (div, body, font, etc 태그). 두 번째 방법은 모든 노드에서 id = qaz 인 모든 노드의 @theAtribute를 제거합니다. 나에게 쓸 방법이 있습니까 ?? 내가 필요한 것은이 두 가지를 혼합 한 것입니다.하지만 xslt에 대한 미지의 문제로 인해 형식을 파악할 수 없습니다. 나는 모든 div에서 theAtribute를 제거하고 div에서만 제거합니다. – Alexandros

+1

나는 본다. 당신이'div/@ theAtribute'를 특별히 배제하고 싶다는 설명에서 나는 깨닫지 못했습니다. 답변을 업데이트했습니다.XML 요소가 네임 스페이스에 바인딩 된 경우 XSLT에 네임 스페이스를 선언하거나 네임 스페이스를 무시하고 로컬 이름과 일치하는 XPATH 문을 사용해야 할 수도 있습니다 (즉, * [local-name() = 'div ']/@ theAtribute') –

+0

그것은 일했습니다 !!!! 완벽한 솔루션과 정말 빠른 응답. 한센 감사합니다 !! – Alexandros

8

select 내에서 name 함수를 사용하여 특성을 제외 (또는 포함) 할 수 있습니다. 당신은 코드 포맷하려는 경우 예를 들어

, <xsl:copy-of select="@*[name(.)!='theAtribute']|node()" />

+0

이것은 나에게 잘 돌아갔다. 나는 한 속성을 대체하고 나머지를 복사하기를 원했다.이 표현은 "나머지" – davenpcj

관련 문제