我有两个头文件(h1,h2),我使用下面的XSL写了图像信息:
我的输入XSL:
if (ModelState.IsValid)
{
// do something
}
else
return "The following errors happen: \n" +
ModelState.SelectMany(s => s.Value.Errors)
.Select(s => s.ErrorMessage)
.Aggregate((seed, currentValue) => seed += "\n" + currentValue);
我的第一个输入XML是(图像不适用于此类型):
<xsl:template match="Body">
<xsl:for-each-group select="*" group-starting-with="h1">
<xsl:if test="not(self::p/img)">
<xsl:variable name="image" select="preceding-sibling::*[1][self::p/img]" />
<topic>
<xsl:attribute name="id">topic_<xsl:number count="h1 | h2"/></xsl:attribute>
<title>
<xsl:apply-templates select="node()"/>
</title>
<xsl:for-each-group select="current-group() except ." group-starting-with="h2">
<xsl:choose>
<xsl:when test="self::h2">
<topic>
<xsl:attribute name="id">topic_<xsl:number count="h1 | h2"/></xsl:attribute>
<title>
<xsl:apply-templates select="node()"/>
</title>
<body><xsl:apply-templates select="current-group()[not(self::p/img)] except ."/></body>
</topic>
</xsl:when>
<xsl:otherwise>
<body><xsl:apply-templates select="$image|current-group()[not(self::p/img)]"/></body>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</topic>
</xsl:if>
</xsl:for-each-group>
</xsl:template>
<xsl:template match="p">
<p><xsl:apply-templates/></p>
</xsl:template>
<xsl:template match="img">
<xsl:element name="image">
<xsl:if test="@src">
<xsl:attribute name="href"><xsl:value-of select="@src"/></xsl:attribute>
</xsl:if>
</xsl:element>
</xsl:template>
我的第二个XML文件:(正确生成图像)
<Body>
<p><img src="https://tneb.com"/></p>
<h1>Taking</h1>
<h2>Blood Pressure?</h2>
<p>second.</p>
</Body>
第一个XML的生成输出:
<Body>
<p><img src="https://tneb.com"/></p>
<h1>Taking</h1>
<p>first</p>
<h2>Blood Pressure?</h2>
<p>second.</p>
</Body>
预期输出为:
<topic id="topic_1">
<title>Taking</title>
<topic id="topic_2">
<title>Blood Pressure?</title>
<body>
<p>second.</p>
</body>
</topic>
</topic>
我必须为这两种类型的输入创建XSL,无论是否带有段落的段落。请为此建议编码。
提前致谢
答案 0 :(得分:0)
我认为你需要在lemma reverse_reverse [simp]:
"reverse $ (reverse $ xs) = xs"
by (induct xs) simp_all
的检查中添加一些逻辑,这样如果它出现在第一个位置(即它之前没有self:h2
标签),那么首先输出图像
p
试试这个XSLT
<xsl:when test="self::h2">
<xsl:if test="position() = 1">
<body><xsl:apply-templates select="$image"/></body>
</xsl:if>