문제

나는 일부 XML 예를 들어,목적을 그림으로 보면 다음과 같습니다.

<root>
    <field1>test</field1>
    <f2>t2</f2>
    <f2>t3</f2>
</root>

나는 그것을 변형시키 XSLT,나만을 억제하려는 두 번째 f2 요소에 출력을 어떻게 확인할 수 내 템플릿을 경우 f2 요소에 이미 존재하는 출력할 때는 두 번째 f2 요소에 원본이 처리합니까?내 XSLT 다음과 같이 현재:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="no" omit-xml-declaration="yes" standalone="no" />
  <xsl:template match="/">
    <xsl:for-each select="./root">
      <output>
        <xsl:apply-templates />        
      </output>
    </xsl:for-each>
  </xsl:template>
  <xsl:template match="*" >
      <xsl:element name="{name(.)}">
        <xsl:value-of select="." />
      </xsl:element>
  </xsl:template>
</xsl:stylesheet>

해야 할 몇 가지 종류의 주위를 확인 xsl:소에서 템플릿을 생각,그러나 나는 확실하지 않다는 방법을 심문하는 출력 문서를 참조하는 경우 요소에 이미 존재한다.

편집:Forgot pre 태그,코드 볼 수 있어야 합니다!

도움이 되었습니까?

해결책

따라 어떻게 다양한 시스템입니다.

즉당신은 당신에만 관심 요소는 어린이의 부모,또는 모든 요소가 동일한 수준에서('사촌'같은 경우)또는 요소에서 어디서나 문서를...

첫 번째 상황에서 확인할 수 있습니다 앞의 형제 축조하는 경우 다른 어떤 요소가 존재하는 같은 이름입니다.

<xsl:if test="count(preceding-sibling::node()[name()=name(current())])=0">
  ... do stuff in here.
</xsl:if>

다른 팁

만 검사(및 경고하는 당신의 복제),를 찾을 수 있습니다 예제

의 라인을 따라 뭔가:

<xsl:for-each-group select="collection(...)//@id" group-by=".">
  <xsl:if test="count(current-group()) ne 1">
    <xsl:message>Id value <xsl:value-of select="current-grouping-key()"/> is 
       duplicated in files
       <xsl:value-of select="current-group()/document-uri(/)" separator=" and
    "/></xsl:message>
  </xsl:if>
 </xsl:for-each-group>

을 수정하여 모든 노드를 선택에'root'요소입니다.

으로 제거하는 중복된 라인,당신은 다른 예제

는 다음과 같을 것이다:

<xsl:stylesheet>
  <xsl:key name="xyz" match="record[x/y/z]" use="x/y/z" />
  <xsl:variable name="noxyzdups" select="/path/to/record[generate-id(.) = generate-id(key('xyz', x/y/z))]" />
...
  <xsl:template ... >
    <xsl:copy-of "exslt:node-set($noxyzdups)" />
  </xsl:template>
</xsl:stylesheet>

x/y/z xpath 표현할 만든 독특한입니다.할 수 있 concat(x,'-',@y,'-',z)또는 당신이 무엇을 원합니다.

지금 나는 그 두 가지 예를은 쉽게 적용할 수 있습니다 당신의 경우,하지만 난 그냥 지적하고 싶었 두 소스에 도움이 됩니다.

그것은 가능 출력의 변형시킵니다.그것은 또한 가능하지 않을 추적의 현재 상태 변환(i.e무엇을 추적 노드 당신이 방출되는 변수에).기본적으로,그의하지 않는 방법 XSLT 작동합니다.중 하나의 비용 효과 측면 무료로그래밍 환경할 수 없는 일을 하는 부작용이 있다.오습니다.

귀하의 경우에는,조건을 만족하는 방법은 것을 구축하는 변수의 목록을 포함한 모든 소스의 요소가 될 수 있는 변신으로 출력하려는 요소 방출은 없습니다.그때마다 확인 노드 당신이 변화에 대해 이 목록입니다.지 않는 경우에,목록에서 방출합니다.면 그것의 첫번째 항목 목록에서 방출합니다.그렇지 않으면 하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top