2015-01-30 3 views
1

가 나는 이름입니다 경우에만 이름이 "ABC"입니다 제거해야노드 집합 길이가 1 개 이상

<Books> 
<Book Name="ABC"> 
    <Line No="43"/> 
</Book> 
<Book Name="XYZ"> 
    <Line No="44"/> 
</Book> 
</Books> 

같은 XML이 경우 "XYZ"가 또한 존재하는 노드 세트에서 노드를 제거 (또는 어디

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
<xsl:output method="xml" indent="yes" /> 
<xsl:if test="count(Books/Book) > '1'"> 
    <xsl:strip-space elements="*" /> 
    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()" /> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="Book[@Name='ABC']" /> 
</xsl:if> 
</xsl:stylesheet> 

이 작동하지 않는 것 : 이름은 "ABC"는 노드 집합의 유일한 요소)

전 제조 된 XSLT 같은하지입니다. 내가 여기서 잘못하고있는 것은 무엇인가?

답변

1

정체성 템플릿의 올바른 줄이 있지만 if (어쨌든 상위 수준에서는 허용되지 않음)을 사용하지 않고 우선하는 빈 템플릿의 패턴과 일치하는 패턴에 조건을 넣어야합니다. 템플릿 내부에서만).

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

    <xsl:template match="Book[@Name='ABC'][count(../Book) &gt; 1]" /> 
</xsl:stylesheet> 
match 패턴이 "ABC"책을 일치하는 것이다

하지만 는 적어도 하나의 다른 Book 형제 자매가있는 경우. ABC가 패턴이 일치하지 않는 유일한 Book 인 경우 정규식 템플릿으로 폴백합니다.

+0

이안 씨 정말 고마워요 ....이 작품은 완벽합니다. –

관련 문제