我尝试通过xslt-script将旧的html转换为我的新xml结构。 我有一个问题是将下面的源转换为我需要的xml结构。
来源
$scope.language = window.localStorage['storageVariableName'];
xml结构
<p>
<a class="DropDown">Example Text</a>
</p>
<div class="collapsed">
<table>..</table>
<p>..</p>
</div>
我尝试了以下xls,但是div class =“collapsed”未被lp标记采用。
<lq>
<p>Example Text</p>
<table>..</table>
<p>..</p>
</lp>
任何人都可以告诉我错误的地方我错了什么?
非常感谢
答案 0 :(得分:2)
恕我直言,你想这样做:
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="p[a/@class='DropDown']">
<lp>
<p>
<xsl:value-of select="a"/>
</p>
<xsl:copy-of select="following-sibling::*[1][self::div]/node()"/>
</lp>
</xsl:template>
<xsl:template match="div[preceding-sibling::*[1][self::p/a/@class='DropDown']]"/>
至于你的错误:
您正在测试某些 p
是否存在的根元素
和包含a
,其后续兄弟是div。在给定的例子中,这些都不是真的;
xsl:if
不会更改上下文:您的<xsl:apply-templates
select="*|text()"/>
将模板应用于子节点
当前a
;
据推测,您不希望div
再次出现在原始位置 -
因此,如果您有另一个模板来禁止它,则无法使用
<xsl:apply-templates>
将其插入您想要的地方 -
至少没有使用其他模式。