我有這個xml與3個節點相同的名稱<person>
。的問題是,它們中的2是一個父節點<people>
下,另一種是根據另一<people>
節點,所以當循環XSL它得到僅第一2.Xsl xml循環問題
XML:
XSL循環:
<xsl:for-each select="//person">
有人知道我需要做什麼才能看到他們所有3個?
謝謝。
我有這個xml與3個節點相同的名稱<person>
。的問題是,它們中的2是一個父節點<people>
下,另一種是根據另一<people>
節點,所以當循環XSL它得到僅第一2.Xsl xml循環問題
XML:
XSL循環:
<xsl:for-each select="//person">
有人知道我需要做什麼才能看到他們所有3個?
謝謝。
不是一個xsl-foreach
一個更好的辦法是使用該人節點相匹配的模板:
<xsl:template match="/">
<!-- match any person element that is a descendant of the root -->
<xsl:apply-templates select="//person"/>
</xsl:template>
<xsl:template match="person">
<!-- transform the person element here -->
</xsl:template match="person">
使用可以使用這個模板,xsl:for-each
:
<xsl:template match="data">
<root>
<xsl:for-each select="//person">
<item>
<xsl:value-of select="name(.)"/>
</item>
</xsl:for-each>
</root>
</xsl:template>
非常感謝。我感謝您的幫助。 –
@ user181421,不客氣! –
中的XPath:
//person
選擇所有人物元素無論在哪裏y位於XML輸入中(請參閱here)。
的XSLT指令:
<xsl:for-each select="//person">
將迭代通過了XPath選擇的所有的人的元素。無論你使用這個指令的背景是什麼,變換都應該迭代所有三個人的元素。這不是像真正的情況下(給出你的問題提供的樣本輸入):
<xsl:template match="/data/people[1]">
<xsl:for-each select=".//person">
<xsl:value-of select="name(.)"/>
</xsl:for-each>
</xsl:template>
你在哪裏明確地選擇從一個特定的背景下開始的所有的人的元素。在這種情況下,我認爲,僅在這種情況下,您只會對前兩個元素進行迭代。
因此在測試中有些奇怪的東西。
爲什麼它比xsl-foreach更好? –
適合我的新方法。你能解釋更多嗎? –
apply-templates選擇一個節點集並搜索要應用的模板。模板定義指示如何轉換匹配「匹配」XPath的元素。這使您可以編寫更鬆散耦合的模板。這有點像在C#中將複雜的方法分解爲許多單獨的方法。它促進重複使用,例如,在上面的示例中轉換人員的模板可以用於許多不同的環境中。如果它是for-each循環內的硬編碼,則不能重新使用。 – ColinE