我正在使用Saxon解析器转换XML。我必须使用两个地方生成相同的输出,我能够做到这一点。我想把条件设置为如果count属性值为0那么它不应该生成任何输出文件。我的输入文件是
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns1:getDocumentByKeyResponsexmlns:ns1="http://www.taleo.com/ws/integration/toolkit/2005/07" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<Document xmlns="http://www.taleo.com/ws/integration/toolkit/2005/07">
<Attributes>
<Attribute name="duration">0:00:00.789</Attribute>
<Attribute name="count">0</Attribute>
<Attribute name="entity">SourcingRequest</Attribute>
<Attribute name="mode">XML</Attribute>
<Attribute name="version">http://www.taleo.com/ws/tee800/2009/01</Attribute>
</Attributes>
<Content>
<ExportXML xmlns="http://www.taleo.com/ws/integration/toolkit/2005/07"/>
</Content>
</Document>
</ns1:getDocumentByKeyResponse>
</soapenv:Body>
</soapenv:Envelope>
我的xsl文件是这样的。
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" encoding="utf-8"/>
<xsl:strip-space elements="*"/>
<xsl:param name="pDest" select="'file:///c:/temp/'"/>
<xsl:param name="pDest1" select="'file:///c:/'"/>
<xsl:template match="*:field">
<xsl:element name="{lower-case(@name)}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="/">
<xsl:result-document
href="{$pDest}requsition_{format-date(current-date(),'[D01]_[M01]')}.xml">
<JobPositionPostings>
<xsl:apply-templates select="descendant::*:Content[1]" />
</JobPositionPostings>
</xsl:result-document>
<xsl:result-document
href="{$pDest1}requsition_{format-date(current-date(),'[D01]_[M01]')}.xml">
<JobPositionPostings>
<xsl:apply-templates select="descendant::*:Content[1]" />
</JobPositionPostings>
</xsl:result-document>
</xsl:template>
<xsl:template match="*:record">
<!--doing rest operation if attribute count not equal to 0 -->
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:0)
我认为你想要替换模板
<xsl:template match="/">
<xsl:result-document
href="{$pDest}requsition_{format-date(current-date(),'[D01]_[M01]')}.xml">
<JobPositionPostings>
<xsl:apply-templates select="descendant::*:Content[1]" />
</JobPositionPostings>
</xsl:result-document>
<xsl:result-document
href="{$pDest1}requsition_{format-date(current-date(),'[D01]_[M01]')}.xml">
<JobPositionPostings>
<xsl:apply-templates select="descendant::*:Content[1]" />
</JobPositionPostings>
</xsl:result-document>
</xsl:template>
以某种方式与
<xsl:template match="/">
<xsl:if test="soapenv:Envelope/soapenv:Body/ns1:getDocumentByKeyResponse/df:Document/df:Attributes/df:Attribute[@name = 'count'] != 0">
<xsl:result-document
href="{$pDest}requsition_{format-date(current-date(),'[D01]_[M01]')}.xml">
<JobPositionPostings>
<xsl:apply-templates select="descendant::*:Content[1]" />
</JobPositionPostings>
</xsl:result-document>
<xsl:result-document
href="{$pDest1}requsition_{format-date(current-date(),'[D01]_[M01]')}.xml">
<JobPositionPostings>
<xsl:apply-templates select="descendant::*:Content[1]" />
</JobPositionPostings>
</xsl:result-document>
</xsl:if>
</xsl:template>
你另外宣布
<xsl:stylesheet xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://www.taleo.com/ws/integration/toolkit/2005/07"
xmlns:df="http://www.taleo.com/ws/integration/toolkit/2005/07"
exclude-result-prefixes="soapenv ns1 df"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
这样,只有条件为真时,才会执行两条xsl:result-document
指令。