2012-07-26 50 views
0

我试图从XML文档中选择业务位置的集合。此代码的工作原理除了仅选择一个项目。所以,我的问题是:有什么我可以做这个代码,使其适用于每个位置?XSLT只选择一个对象

<xsl:template match="/InstitutionAlias/InstitutionAliasExternalReferenceCollection"> 
    <InstitutionExternalReferenceCollection>  
    <xsl:for-each select="InstitutionAliasExternalReference"> 
     <InstitutionExternalReference> 
     <ExternalReferenceIdentifier> 
      <xsl:value-of select="ExternalReferenceIdentifier"/> 
     </ExternalReferenceIdentifier> 
     </InstitutionExternalReference> 
    </xsl:for-each> 
    </InstitutionExternalReferenceCollection> 
</xsl:template> 

这是输出应该是什么样子

<InstitutionExternalReferenceCollection> 
- <InstitutionExternalReference> 
    <ExternalReferenceIdentifier>Test1</ExternalReferenceIdentifier> 
</InstitutionExternalReference> 

- <InstitutionExternalReference> 
    <ExternalReferenceIdentifier>Test2</ExternalReferenceIdentifier> 
</InstitutionExternalReference> 

下面是一个示例XML文件。

- <InstitutionAliasExternalReferenceCollection> 
- <InstitutionAliasExternalReference> 
    <ExternalReferenceIdentifier>Test1</ExternalReferenceIdentifier> 
</InstitutionAliasExternalReference> 
- <InstitutionAliasExternalReference> 
    <ExternalReferenceIdentifier>Test2</ExternalReferenceIdentifier> 
</InstitutionAliasExternalReference> 

+1

请提供样本xml。 – 2012-07-26 17:04:47

+0

我相信你应该用for-each标签包装你的选择标签,并将for-each标签的​​select属性设置为/ Business/LocationCollection。 '代码'<的xsl:for-每个选择= “/商业/ LocationCollection”> ...的 – slukse 2012-07-26 17:44:46

+0

'换each'最好在XSLT避免。 – Utkanos 2012-07-26 17:45:47

回答

1

像这样的事情?如果你确信每个企业只能有一个位置标识符(我不知道),但它可以被压缩,但我决定把事情分离成单独的模板。

您可以在this XMLPlayground上运行它(请参阅输出源)。

<!-- kick things off --> 
    <xsl:template match="BusinessCollection"> 
     <BusinessCollection> 
      <xsl:apply-templates select='Business' /> 
     </BusinessCollection> 
    </xsl:template> 

    <!-- each business --> 
    <xsl:template match='Business'> 
     <Business> 
      <xsl:apply-templates select='LocationIdentifier' /> 
     </Business> 
    </xsl:template> 

    <!-- each location identifier --> 
    <xsl:template match='LocationIdentifier'> 
     <LocationIdentifier> 
      <xsl:value-of select='.' /> 
     </LocationIdentifier> 
    </xsl:template> 

</xsl:stylesheet> 

你期望的输出提到Data节点,但这些并没有出现在你的XSL的尝试,所以我不知道目的是什么就有什么。

+0

对不起,字段名称是钝的,所以我认为最好将它们编辑为合理的。我编辑了这个问题来使用真实的数据。我已经尝试过这个foreach,但它不会选择多个InstitutionExternalReference。 – user1549583 2012-07-26 18:10:20

+0

Utkanos,你的解决方案很好。我确实让我的每个人都能工作。不确定哪个更可取。在XSLT中最好避免使用每个循环的 – user1549583 2012-07-26 18:20:32

+1

。模板化解决方案提供更多可扩展性和灵活性。 – Utkanos 2012-07-26 18:28:00