2012-06-14 51 views
0

我是xslt的新手,尝试创建一个XSLT, 我打电话给另一个模板,并将param值传递给它 但是不知何故空白值会在目标模板的param变量中出现。XSLT。使用xsl调用另一个模板:param

这里是简化的示例XML文件:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 
<TCXML xmlns="http://www.tcxml.org/Schemas/TCXMLSchema"> 
<BOMWindow elemId="id62" revision_rule="id60" top_line="id2"> 

    <GSIdentity elemId="id1" label="a00pC7EtM1CZ7D"/> 

</BOMWindow> 

<IMAN_Drawing elemId="id78" owning_site="id4" primary_object="#id21" secondary_object="#id25" user_data=""> 

    <GSIdentity elemId="id50" label="R8D9sTvgBT4jNA"/> 

</IMAN_Drawing> 
    <IMAN_Drawing elemId="id79" owning_site="#id4" primary_object="#id22" secondary_object="#id26" user_data=""> 

    <GSIdentity elemId="id56" label="R8D9sTfVBT4jNA"/> 

</IMAN_Drawing> 
    <IMAN_Drawing elemId="id80" owning_site="#id4" primary_object="#id20" secondary_object="#id24" user_data=""> 

    <GSIdentity elemId="id44" label="R8A9sTu6BT4jNA"/> 

</IMAN_Drawing> 



<UGPART creation_date="2012-06-05T09:25:30Z" date_released="2012-06-05T09:25:33Z" ead_paragraph="" elemId="id117" format_used="PART" gov_classification="" object_name="Test" owning_organization="" > 

    <GSIdentity elemId="id21" label="RXM9sPifBT4jNA"/> 

</UGPART> 
<UGPART creation_date="2012-06-05T09:25:30Z" date_released="2012-06-05T09:25:33Z" ead_paragraph="" elemId="id117" format_used="PART" gov_classification="" object_name="Test2" owning_organization="" > 

    <GSIdentity elemId="id20" label="R3K9sPifBT4jNA"/> 

</UGPART> 
<UGPART creation_date="2012-06-05T09:25:30Z" date_released="2012-06-05T09:25:33Z" ead_paragraph="" elemId="id117" format_used="PART" gov_classification="" object_name="Test3" owning_organization="" > 

    <GSIdentity elemId="id22" label="xuO9sPifBT4jNA"/> 

</UGPART> 

在XML中有3个IMAN_Drawing标签,以及3个UGPART标签

这里是我的这个

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:plm="http://www.tcxml.org/Schemas/TCXMLSchema" version="1.0"> 
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 
<xsl:template match="/plm:TCXML/plm:IMAN_Drawing"> 
<xsl:copy> 
    <xsl:copy-of select="@*" /> 
    <xsl:for-each select="/plm:TCXML/plm:IMAN_Drawing"> 
     <xsl:variable name="currentSecObjectId" select="@secondary_object"/> 
     <xsl:variable name="RefSecObjectId" select="substring($currentSecObjectId,2)"/> 
     <xsl:variable name="currentPrimaryObjectId" select="/plm:TCXML/plm:IMAN_Drawing/@primary_object"/> 
     <xsl:variable name="RefPrimaryObjectId" select="substring($currentPrimaryObjectId,2)"/> 
     <xsl:call-template name="UGPart"> 
      <xsl:with-param name="PriId" select="$RefPrimaryObjectId"/> 
     </xsl:call-template> 
    </xsl:for-each> 

    <xsl:apply-templates/> 

</xsl:copy> 
</xsl:template> 
    <xsl:template match="/plm:TCXML/plm:UGPART" name="UGPart"> 
    <xsl:param name="PriId"/> 
    <xsl:copy> 
    <xsl:if test="@object_name="'Test'"> 
     <xsl:attribute name="owning_organization"> 
      <xsl:value-of select="$PriId"/> 
     </xsl:attribute>   
    </xsl:if> 
     <xsl:copy-of select="@*[not(name()='owning_organization')]" /> 
    <xsl:apply-templates /> 
    </xsl:copy> 

</xsl:template> 
</xsl:stylesheet> 

但XSLT输出为: owning_organization =“”

Expe反恐执行局的结果是: 应该更新哪些我从模板1通过与价值= $ RefPrimaryObjectId为UGPART当其@object_name =“‘测试’”

是怎么回事错在这里owning_organization属性?为什么$ RefPrimaryObjectId“的值不是第二个模板

+0

您确定/ plm:TCXML/plm:IMAN_Drawing/@ secondary_object包含值并存在吗? – Woody

+1

如果它不是很大,你可以提供XML输入(通过*编辑*你原来的问题)?如果它很大,请尝试将其修剪到易于看到问题但仍会产生问题的级别 – freefaller

+0

您忘记提供一个XML文档,并且您还没有提供完整的转换 - 错误是基于缺少的信息。请编辑问题并提供一个完整的(但尽可能小的)XML文档和一个完整的转换,以便我们可以运行转换并重新报告问题。 –

回答

0

你应该真的提供你的期望输出,否则它真的很难理解你想要什么我正在做一些猜测你的预期输出在你提供的样式表上

我的意思是没有不尊重,我只是试图帮助,但你的样式表指向了这么多的误解,而不仅仅是选择我的解决方案(下面提供),你可能会从长远来看,通过放下笔并通过一些已发表的教程或阅读一本书来更好。

任何方式...

这个样式表...

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:plm="http://www.tcxml.org/Schemas/TCXMLSchema" > 
<xsl:output method="xml" indent="yes"/> 

<xsl:template match="@*|node()"> 
<xsl:copy> 
    <xsl:apply-templates select="@*|node()"/> 
</xsl:copy> 
</xsl:template> 

<xsl:template match="plm:IMAN_Drawing"> 
<xsl:variable name="id" select="substring(@primary_object,2)" /> 
<xsl:copy> 
    <xsl:apply-templates select="@*"/> 
</xsl:copy> 
    <xsl:for-each select="../plm:UGPART[plm:GSIdentity/@elemId=$id]" > 
    <xsl:copy> 
    <xsl:apply-templates select="@*[name()!='owning_organization' or ../@object_name!='Test']"/> 
    <xsl:if test="@object_name='Test'"> 
     <xsl:attribute name="owning_organization"><xsl:value-of select="$id" /></xsl:attribute> 
    </xsl:if> 
    <xsl:apply-templates select="node()"/> 
    </xsl:copy> 
</xsl:for-each> 
</xsl:template > 

<xsl:template match="plm:UGPART" /> 

</xsl:stylesheet> 

...当适用于您的样品输入,会产生输出...

<?xml version="1.0" encoding="utf-8"?> 
<TCXML xmlns="http://www.tcxml.org/Schemas/TCXMLSchema"> 
<BOMWindow elemId="id62" revision_rule="#id60" top_line="#id2"> 
    <GSIdentity elemId="id1" label="a00pC7EtM1CZ7D" /> 
</BOMWindow> 
<IMAN_Drawing elemId="id78" owning_site="#id4" primary_object="#id21" secondary_object="#id25" user_data="" /><UGPART creation_date="2012-06-05T09:25:30Z" date_released="2012-06-05T09:25:33Z" ead_paragraph="" elemId="id117" format_used="PART" gov_classification="" object_name="Test" owning_organization="id21"> 
    <GSIdentity elemId="id21" label="RXM9sPifBT4jNA" /> 
</UGPART> 
    <IMAN_Drawing elemId="id79" owning_site="#id4" primary_object="#id22" secondary_object="#id26" user_data="" /><UGPART creation_date="2012-06-05T09:25:30Z" date_released="2012-06-05T09:25:33Z" ead_paragraph="" elemId="id117" format_used="PART" gov_classification="" object_name="Test3" owning_organization=""> 
    <GSIdentity elemId="id22" label="xuO9sPifBT4jNA" /> 
    </UGPART> 
    <IMAN_Drawing elemId="id80" owning_site="#id4" primary_object="#id20" secondary_object="#id24" user_data="" /><UGPART creation_date="2012-06-05T09:25:30Z" date_released="2012-06-05T09:25:33Z" ead_paragraph="" elemId="id117" format_used="PART" gov_classification="" object_name="Test2" owning_organization=""> 
    <GSIdentity elemId="id20" label="R3K9sPifBT4jNA" /> 
</UGPART> 
</TCXML> 

让我们知道,如果我误解了你的预期输出。