을 선택 나는 같은 XML 파일이 있습니다. 일부 파일에는 이름이 "dummy"인 작업이 포함되어 있거나 포함되어 있지 않을 수 있습니다. 결국 변환 된 파일은 다음과 같이 보입니다.XSLT 필터와 첫 번째 요소
<work>
<job name="unit1">
<task>abc</task>
<user>def</user>
</job>
</work>
xslt를 필터링하고 선택하려면 어떻게해야합니까?
을 선택 나는 같은 XML 파일이 있습니다. 일부 파일에는 이름이 "dummy"인 작업이 포함되어 있거나 포함되어 있지 않을 수 있습니다. 결국 변환 된 파일은 다음과 같이 보입니다.XSLT 필터와 첫 번째 요소
<work>
<job name="unit1">
<task>abc</task>
<user>def</user>
</job>
</work>
xslt를 필터링하고 선택하려면 어떻게해야합니까?
당신은
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="job[@name = 'dummy'] | job[not(@name = 'dummy')][position() > 1]"/>
가장 간단한 방법은이 오히려 유지하려는 것보다 무시하고 싶은 생각하는 것보다 큰 변화의 일부인 경우
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/*">
<xsl:copy>
<!-- copy the first job-whose-name-is-not-dummy -->
<xsl:copy-of select="job[not(@name = 'dummy')][1]" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
다른 방법이 그것에 대해 생각하는 것 :
당신은 당신이 유지하려는 할job
요소와 바로 복사가 아닌 다른 작업을 수행하려는 경우 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- copy everything as-is unless overridden -->
<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy>
</xsl:template>
<!-- ignore jobs named dummy -->
<xsl:template match="job[@name = 'dummy']" />
<!-- ignore jobs *not* named dummy, apart from the first one -->
<xsl:template match="job[not(@name = 'dummy')][position() > 1]" />
</xsl:stylesheet>
그런 식으로 당신은 더 템플릿을 정의 할 수 있습니다.
내 상황이 조금 다릅니다 사용할 수 있지만 덕분에, 나는 그것의 요점을 얻었다. 기본적으로 모든 노드를 복사하고 copy-all 템플릿 외부의 원하지 않는 노드를 제거했습니다. 그래서 저는 두 줄을 사용해야했습니다 : 그리고 –
Rnet
아, 지금 편집을 보았습니다. 감사합니다. :) – Rnet