以下是我的代码的一些简化版本:
这是我的XML:
<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="XSLTFile.xslt"?>
<ResultSet>
<RAMTemplatePart>
<Number>1</Number>
<Title>STRUCTURAL DISCREPANCY IDENTIFICATION</Title>
<RAMTemplateSection>
<Number>1</Number>
<RAMTemplatePartNumber>1</RAMTemplatePartNumber>
<Title>PART 1 INFORMATION</Title>
<RAMTemplateItem>
<Letter>1a</Letter>
<RamTemplateSectionNumber>1</RamTemplateSectionNumber>
<Title>Non-routine or Log Page Number</Title>
</RAMTemplateItem>
<RAMTemplateItem>
<Letter>1b</Letter>
<RamTemplateSectionNumber>1</RamTemplateSectionNumber>
<Title>PART 1 Revision Number</Title>
</RAMTemplateItem>
</RAMTemplateSection>
</RAMTemplatePart>
<RAM>
<Id>26</Id>
<CreatedBy>David</CreatedBy>
<RAMPart1>
<Id>21</Id>
<RamId>26</RamId>
<A1a>aaa</A1a>
<A1b>bbb</A1b>
</RAMPart1>
</RAM>
</ResultSet>
这是我的XSL:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="ResultSet/RAMTemplatePart/RAMTemplateSection/RAMTemplateItem">
<div>
<xsl:value-of select="Letter"/>.
<xsl:value-of select="Title"/>
<input></input>
</div>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
我想动态填充输入,例如,在RAMTemplateItem为1a的地方,它将填充来自RAMPart1 A1a的数据,以及来自A1b的1b等。 我怎么能这样做?
答案 0 :(得分:0)
如果要从XML中的其他节点查找值,通常可以使用“密钥”。
在这种情况下,听起来你想要查找 RAMPart1 的子元素,其名称以字母“A”开头。所以,你可以写下这样的密钥:
<xsl:key name="RAMPart1"
match="RAMPart1/*[starts-with(local-name(), 'A')]"
use="substring-after(local-name(), 'A')" />
这将允许您查找这些元素,但在“A”之后使用名称部分。例如,key('RAMPart1', '1a')
将返回名称为“A1a”的元素。第二个参数不必是固定字符串,但可以是节点的值。例如,在您的情况下,您将执行此操作
<xsl:value-of select="key('RAMPart1', Letter)" />
试试这个XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="RAMPart1" match="RAMPart1/*[starts-with(local-name(), 'A')]" use="substring-after(local-name(), 'A')" />
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="ResultSet/RAMTemplatePart/RAMTemplateSection/RAMTemplateItem">
<div>
<xsl:value-of select="Letter"/>.
<xsl:value-of select="Title"/>
<input>
<xsl:value-of select="key('RAMPart1', Letter)" />
</input>
</div>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>