XSL [初学者] 如何在 table 中使用不同实体的属性
XSL [Beginner] How to use different entities' attribute in a table
我以前从未编码过,所以这可能是一个糟糕的问题,但我正在努力设计我想要的代码:
这是我的一些数据(XML 文档):
<Exam>
<id>98</id>
<ExamName>Mathematics</ExamName>
<ExamGrade>6</ExamGrade>
</Exam>
<Exam>
<id>99</id>
<ExamName>Mathematics</ExamName>
<ExamGrade>6</ExamGrade>
</Exam>
<Exam>
<id>100</id>
<ExamName>Data Management</ExamName>
<ExamGrade>6</ExamGrade>
</Exam>
</Exams>
<Schools>
<School>
<Ranking>1</Ranking>
<MinimumRequired>6</MinimumRequired>
<SchoolName>Hardvard</SchoolName>
</School>
<School>
<Ranking>2</Ranking>
<MinimumRequired>5.7</MinimumRequired>
<SchoolName>ETH Zurich</SchoolName>
</School>
<School>
<Ranking>3</Ranking>
<MinimumRequired>5.5</MinimumRequired>
<SchoolName>SAS's School</SchoolName>
</School>
<School>
<Ranking>4</Ranking>
<MinimumRequired>5.2</MinimumRequired>
<SchoolName>Zhaw</SchoolName>
</School>
</Schools>
<Students>
<Student>
<id>1</id>
<Name>Brion</Name>
<National>National</National>
<DataManagementGrade>5.2</DataManagementGrade>
</Student>
<Student>
<id>2</id>
<Name>Niels</Name>
<National>National</National>
<DataManagementGrade>4.4</DataManagementGrade>
</Student>
<Student>
<id>3</id>
<Name>Lukas</Name>
<National>International</National>
<DataManagementGrade>4.3</DataManagementGrade>
</Student>
<Student>
<id>4</id>
<Name>Adelheid</Name>
<National>International</National>
<DataManagementGrade>4.4</DataManagementGrade>
</Student>
我有 3 个实体:学生(100 个实例);学校(4 个实例)和考试(100 个实例)
这是我在 XSL 文档中使用的代码:
<table class="table table-hover">
<thead>
<tr>
<th scope="col">ID</th>
<th scope="col">Name</th>
<th scope="col">National / International</th>
<th scope="col">Data Management Grade</th>
<th scope="col">Entrance Exam's subject</th>
<th scope="col">Exam's Grade</th>
</tr>
</thead>
<tbody>
<xsl:for-each select="data/Students/Student">
<tr>
<td>
<xsl:value-of select="id"/></td>
<td>
<xsl:value-of select="Name"/></td>
<td>
<xsl:value-of select="National"/></td>
<td>
<xsl:value-of select="DataManagementGrade"/></td>
<td></td>
<td></td>
</tr>
</xsl:for-each>
</tbody>
</table>
结果如下:
Result of my XSL and XML document
如您所见,最后两列为空(入学考试的主题 + 来自 'Exam' 实例的考试成绩),我不知道如何从实体 'Exam' 获取数据,因为我是已经在使用 '' 当我尝试将 'xsl:for-each select' 添加到考试实例时,我的所有列都为空或 [= 的一部分35=] 文档不完整。
我尝试了很多东西并在互联网上进行了研究,但我没有成功找到任何解决方案。 'Exam' 和 'Student' 共享属性 'id' 我想创建一个密钥来解决此类问题,但是当我尝试创建和使用我的密钥 none数据出现在文档中。
另外,对于这些实体的每个实例,“Exam”的“id 1”必须与“Student”的“id 1”行相匹配。
如果有人能解决我的问题,我将不胜感激,谢谢
您可以使用 XPath 进行导航。以下是如何查找与当前节点(<Student>
的)<id>
.
具有相同 <id>
的 <Exam>
<xsl:for-each select="Student">
<!-- ... -->
<td><xsl:value-of select="/*/Exams/Exam[id = current()/id]/ExamName" /></td>
<!-- ... -->
</xsl:for-each>
您也可以将其保存在变量中并re-use它。
<xsl:for-each select="Student">
<!-- Entrance Exam -->
<xsl:variable name="exam" select="/*/Exams/Exam[id = current()/id]" />
<!-- ... -->
<td><xsl:value-of select="$exam/ExamName" /></td>
<td><xsl:value-of select="$exam/ExamGrade" /></td>
<!-- ... -->
</xsl:for-each>
或者,您可以使用 XSL 密钥,在样式表的 top-level 处定义一次:
<xsl:key name="examById" match="Exam" use="id" />
<xsl:for-each select="Student">
<!-- ... -->
<td><xsl:value-of select="key('examById', id)/ExamName" /></td>
<td><xsl:value-of select="key('examById', id)/ExamGrade" /></td>
<!-- ... -->
</xsl:for-each>
我以前从未编码过,所以这可能是一个糟糕的问题,但我正在努力设计我想要的代码: 这是我的一些数据(XML 文档):
<Exam>
<id>98</id>
<ExamName>Mathematics</ExamName>
<ExamGrade>6</ExamGrade>
</Exam>
<Exam>
<id>99</id>
<ExamName>Mathematics</ExamName>
<ExamGrade>6</ExamGrade>
</Exam>
<Exam>
<id>100</id>
<ExamName>Data Management</ExamName>
<ExamGrade>6</ExamGrade>
</Exam>
</Exams>
<Schools>
<School>
<Ranking>1</Ranking>
<MinimumRequired>6</MinimumRequired>
<SchoolName>Hardvard</SchoolName>
</School>
<School>
<Ranking>2</Ranking>
<MinimumRequired>5.7</MinimumRequired>
<SchoolName>ETH Zurich</SchoolName>
</School>
<School>
<Ranking>3</Ranking>
<MinimumRequired>5.5</MinimumRequired>
<SchoolName>SAS's School</SchoolName>
</School>
<School>
<Ranking>4</Ranking>
<MinimumRequired>5.2</MinimumRequired>
<SchoolName>Zhaw</SchoolName>
</School>
</Schools>
<Students>
<Student>
<id>1</id>
<Name>Brion</Name>
<National>National</National>
<DataManagementGrade>5.2</DataManagementGrade>
</Student>
<Student>
<id>2</id>
<Name>Niels</Name>
<National>National</National>
<DataManagementGrade>4.4</DataManagementGrade>
</Student>
<Student>
<id>3</id>
<Name>Lukas</Name>
<National>International</National>
<DataManagementGrade>4.3</DataManagementGrade>
</Student>
<Student>
<id>4</id>
<Name>Adelheid</Name>
<National>International</National>
<DataManagementGrade>4.4</DataManagementGrade>
</Student>
我有 3 个实体:学生(100 个实例);学校(4 个实例)和考试(100 个实例)
这是我在 XSL 文档中使用的代码:
<table class="table table-hover">
<thead>
<tr>
<th scope="col">ID</th>
<th scope="col">Name</th>
<th scope="col">National / International</th>
<th scope="col">Data Management Grade</th>
<th scope="col">Entrance Exam's subject</th>
<th scope="col">Exam's Grade</th>
</tr>
</thead>
<tbody>
<xsl:for-each select="data/Students/Student">
<tr>
<td>
<xsl:value-of select="id"/></td>
<td>
<xsl:value-of select="Name"/></td>
<td>
<xsl:value-of select="National"/></td>
<td>
<xsl:value-of select="DataManagementGrade"/></td>
<td></td>
<td></td>
</tr>
</xsl:for-each>
</tbody>
</table>
结果如下: Result of my XSL and XML document
如您所见,最后两列为空(入学考试的主题 + 来自 'Exam' 实例的考试成绩),我不知道如何从实体 'Exam' 获取数据,因为我是已经在使用 '
我尝试了很多东西并在互联网上进行了研究,但我没有成功找到任何解决方案。 'Exam' 和 'Student' 共享属性 'id' 我想创建一个密钥来解决此类问题,但是当我尝试创建和使用我的密钥 none数据出现在文档中。 另外,对于这些实体的每个实例,“Exam”的“id 1”必须与“Student”的“id 1”行相匹配。
如果有人能解决我的问题,我将不胜感激,谢谢
您可以使用 XPath 进行导航。以下是如何查找与当前节点(<Student>
的)<id>
.
<id>
的 <Exam>
<xsl:for-each select="Student">
<!-- ... -->
<td><xsl:value-of select="/*/Exams/Exam[id = current()/id]/ExamName" /></td>
<!-- ... -->
</xsl:for-each>
您也可以将其保存在变量中并re-use它。
<xsl:for-each select="Student">
<!-- Entrance Exam -->
<xsl:variable name="exam" select="/*/Exams/Exam[id = current()/id]" />
<!-- ... -->
<td><xsl:value-of select="$exam/ExamName" /></td>
<td><xsl:value-of select="$exam/ExamGrade" /></td>
<!-- ... -->
</xsl:for-each>
或者,您可以使用 XSL 密钥,在样式表的 top-level 处定义一次:
<xsl:key name="examById" match="Exam" use="id" />
<xsl:for-each select="Student">
<!-- ... -->
<td><xsl:value-of select="key('examById', id)/ExamName" /></td>
<td><xsl:value-of select="key('examById', id)/ExamGrade" /></td>
<!-- ... -->
</xsl:for-each>