这是我的输入架构(xml):
<ns0:Catalog xmlns:ns0="http://Schema.InputSchema1">
<cd>
<cd1 ID="1" Title="Employee">
<Name>Prakash</Name>
<Salary>50000</Salary>
</cd1>
<cd1 ID="2" Title="Singer">
<Name>Ellie</Name>
<Salary>500000</Salary>
</cd1>
</cd>
</ns0:Catalog>`
我正在申请以下xslt:
<?xml version="1.0" encoding="utf-16" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:var=
"http://schemas.microsoft.com/BizTalk/2003/var"
exclude-result-prefixes="msxsl var s0"
version="1.0" xmlns:ns0="http://Schema.OutputSchema1" xmlns:s0=
"http://Schema.InputSchema1">
<xsl:output omit-xml-declaration="yes" method="xml" version="1.0" />
<xsl:template match="/">
<xsl:apply-templates select="/s0:Catalog" />
</xsl:template>
<xsl:template match="/s0:Catalog">
<ns0:Output>
<xsl:for-each select="cd/cd1">
<ID>
<xsl:value-of select="//@ID"/>
</ID>
</xsl:for-each>
</ns0:Output>
</xsl:template>
</xsl:stylesheet>
但是我每次都获得ID值,而循环完成2次。 //实际使用的是什么?如何通过//获取所有ID值?
答案 0 :(得分:0)
指示:
<xsl:value-of select="//@ID"/>
选择作为ID
根节点后代的所有/
属性,并返回其中一个第一个的值(按文档顺序排列)。
在您的示例中,您已经处于cd1
的上下文中,因此您需要做的就是:
<xsl:value-of select="@ID"/>
-
另请注意此模板:
<xsl:template match="/">
<xsl:apply-templates select="/s0:Catalog" />
</xsl:template>
是多余的。
答案 1 :(得分:-1)
@Prakash,
你可以在XSL下面使用获取所有ID值。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select= "Catalog/cd/cd1">
<ID>
<xsl:value-of select="@ID"/>
</ID>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
输出:
<?xml version="1.0" encoding="UTF-8"?>
<ID>1</ID>
<ID>2</ID>