我对XML& XSLT刚刚开始工作,我的一个项目需要我使用它。我正在尝试使用动态变量(稍后此变量不会被硬编码)来获取某个模块的属性。 这是我的XSL的精简版本:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<style type="text/css">
.details
{
margin:25px 25px;
}
</style>
<xsl:variable name="name" select="1234"/>
<xsl:for-each select="Root/Row[Module_Name='$name']">
<html>
<div class="details">
<pre>
<b>Module:</b> <xsl:value-of select="Module_Name"/><br></br>
<b>Description:</b> <xsl:value-of select="Description"/>
</pre>
</div>
</html>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
示例XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Row>
<SI_NO>1</SI_NO>
<Module_Name>1234</Module_Name>
<Description>This is the description</Description>
</Row>
</Root>
现在输出为空白。我想我不能用这种方式使用变量,我希望有人可以用正确的方式指导我。
谢谢。
答案 0 :(得分:2)
<强>输入:强>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Row>
<SI_NO>1</SI_NO>
<Module_Name>1234</Module_Name>
<Description>This is the description</Description>
</Row>
</Root>
<强> XSL:强>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<style type="text/css">.details
{
margin:25px 25px;
}</style>
<xsl:variable name="name" select="1234" />
<xsl:for-each select="Root/Row[Module_Name=$name]">
<html>
<div class="details">
<pre>
<b>Module:</b>
<xsl:value-of select="Module_Name" />
<br />
<b>Description:</b>
<xsl:value-of select="Description" />
</pre>
</div>
</html>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
<强>输出:强>
<?xml version="1.0" encoding="UTF-8"?>
<style type="text/css">
.details
{
margin:25px 25px;
}
</style>
<html>
<div class="details">
<pre>
<b>Module:</b>1234<br/>
<b>Description:</b>This is the description</pre>
</div>
</html>
答案 1 :(得分:1)
您希望<xsl:for-each select="Root/Row[Module_Name=$name]">
代替<xsl:for-each select="Root/Row[Module_Name='$name']">
。您的版本会将Module_Name
元素与包含美元符号后跟name
的字符串文字进行比较。