我想在<ul>
元素中包含一个<li>
元素,但是我不知道该怎么做。我试图以一种简单易懂的方式来描述问题。我怀疑这只是一个很小的地方,必须加以调整。
我正在使用XSLT 1.0。
这是给定的XML:
<University>
<Student>
<Info>Example 1.0</Info>
<Details>
<Entry>
<Info>Example 1.1</Info>
</Entry>
<Entry>
<Info>Example 1.2</Info>
</Entry>
</Details>
</Student>
<Student>
<Info>Example 2.0</Info>
</Student>
<Student>
<Info>Example 3.0</Info>
</Student>
</University>
我想要的内容应如下所示:
<div>
<p data-role="heading">UNIVERSITY</p>
<ul>
<li>Example 1.0
<ul>
<li>Example 1.1</li>
<li>Example 1.2</li>
</ul>
</li>
<li>Example 2.0</li>
<li>Example 3.0</li>
</ul>
</div>
此刻我得到的是以下代码:
<div>
<p data-role="heading">UNIVERSITY</p>
<ul>
<li>Example 1.0</li>
<ul>
<li>Example 1.1</li>
<li>Example 1.2</li>
</ul>
<li>Example 2.0</li>
<li>Example 3.0</li>
</ul>
</div>
我的XSLT看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:nxps="urn:nxps"
exclude-result-prefixes="nxps">
<xsl:strip-space elements="*"/>
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<!-- UNIVERSITY -->
<xsl:template match="University">
<div>
<!-- HEADING -->
<p data-role="heading">
<xsl:text>UNIVERSITY</xsl:text>
</p>
<ul>
<xsl:apply-templates/>
</ul>
</div>
</xsl:template>
<!-- STUDENT -->
<xsl:template match="Student">
<xsl:apply-templates/>
</xsl:template>
<!-- INFO IN STUDENT & ENTRY -->
<xsl:template match="Entry/Info | Student/Info">
<xsl:choose>
<!-- FIRST INFO -->
<xsl:when test="name(preceding-sibling::*[1])!='Info'">
<li>
<xsl:apply-templates/>
</li>
</xsl:when>
<!-- FOLLOWING INFO -->
<xsl:otherwise>
<li class="Parablock">
<xsl:apply-templates/>
</li>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- DETAILS -->
<xsl:template match="Details">
<ul>
<xsl:apply-templates/>
</ul>
</xsl:template>
<!-- ENTRY -->
<xsl:template match="Entry">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
这也是指向.NET XSLT小提琴的链接:https://xsltfiddle.liberty-development.net/eiZQaG5/1
感谢您的帮助!
答案 0 :(得分:1)
我认为您需要一个模板,该模板匹配具有子arrayValue.sort((a, b) => ...)
节点的Student
个节点
Details
然后,在与<xsl:template match="Student[Details]">
<xsl:apply-templates select="Info" />
</xsl:template>
匹配的模板中,您可以选择以下任何一个Student/Info
节点,以便将其作为嵌套元素输出到Details
li
尝试使用此XSLT,其中我还简化了<xsl:apply-templates select="following-sibling::*[1][self::Details]" />
模板:
Student/Info
请注意,实际上您可以删除“学生”和“条目”模板,因为在这种情况下XSLT的内置模板会做完全相同的事情。