XSLT只选择一个对象
我试图从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>
像这样的事情?如果你确信每个企业只能有一个位置标识符(我不知道),但它可以被压缩,但我决定把事情分离成单独的模板。
您可以在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的尝试,所以我不知道目的是什么就有什么。
对不起,字段名称是钝的,所以我认为最好将它们编辑为合理的。我编辑了这个问题来使用真实的数据。我已经尝试过这个foreach,但它不会选择多个InstitutionExternalReference。 – user1549583 2012-07-26 18:10:20
Utkanos,你的解决方案很好。我确实让我的每个人都能工作。不确定哪个更可取。在XSLT中最好避免使用每个循环的 – user1549583 2012-07-26 18:20:32
。模板化解决方案提供更多可扩展性和灵活性。 – Utkanos 2012-07-26 18:28:00
请提供样本xml。 – 2012-07-26 17:04:47
我相信你应该用for-each标签包装你的选择标签,并将for-each标签的select属性设置为/ Business/LocationCollection。 '代码' ... 的xsl:for-each>的 –
slukse
2012-07-26 17:44:46
'换each'最好在XSLT避免。 – Utkanos 2012-07-26 17:45:47