簡體   English   中英

XSL來自XML的所有記錄

[英]XSL all records from XML

例如,我有此源XML:

<People>
   <Person Name="NameOne"/>
   <Person Name="NameTwo"/>
</People>

我有這個XSL:

<?xml version="1.0" encoding="Windows-1250"?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
     <xsl:for-each select="People">  
        <Names> 
                <Human><xsl:value-of select="Person/@Name"/></Human>
        </Names>
     </xsl:for-each> 
</xsl:template>

</xsl:stylesheet>

我有此XML輸出:

<Names> 
     <Human>NameOne</Human>
</Names>

但是我需要所有記錄的輸出:

<Names> 
     <Human>NameOne</Human>
     <Human>NameTwo</Human>
</Names>

請問您有什么主意嗎?

問題是您正在遍歷People元素

<xsl:for-each select="People">  

但是您的XML中只有一個People元素。 您需要“匹配” People元素,然后遍歷Person元素

試試這個XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="People">
    <Names> 
        <xsl:for-each select="Person">  
            <Human><xsl:value-of select="@Name"/></Human>
        </xsl:for-each> 
    </Names>
</xsl:template>
</xsl:stylesheet>

或更妙的是,使用不帶xsl:for-each的完全模板方法

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="People">
    <Names> 
        <xsl:apply-templates select="Person" /> 
    </Names>
</xsl:template>

<xsl:template match="Person">
    <Human><xsl:value-of select="@Name"/></Human>
</xsl:template>
</xsl:stylesheet>

如果要使用for-each,請使用以下代碼

<xsl:template match="/">
    <Names> 
    <xsl:for-each select="People/Person">            
            <Human><xsl:value-of select="@Name"/></Human>
    </xsl:for-each> 
    </Names>
</xsl:template>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM