2012-07-26 49 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