我想转换以下HTML代码
<div id="pg-1">
<div id="pgc-1">
<div class="test">Hello World!</div>
</div>
<div id="pgc-2">
<div class="test">Hello World!</div>
</div>
</div>
<div id="pg-2">
<div id="pgc-3">
<div class="test">Hello World!</div>
</div>
<div id="pgc-4">
<div class="test">Hello World!</div>
</div>
</div>
进入这个
<section id="pg-1">
<div class="container">
<div class="row">
<div id="pgc-1">
<div class="test">Hello World!</div>
</div>
<div id="pgc-2">
<div class="test">Hello World!</div>
</div>
</div>
</div>
</section>
<section id="pg-2">
<div class="container">
<div class="row">
<div id="pgc-3">
<div class="test">Hello World!</div>
</div>
<div id="pgc-4">
<div class="test">Hello World!</div>
</div>
</div>
</div>
</section>
我能够使这个XSLT文档正常工作:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="//div[starts-with(@id, 'pgc-')]">
<div class="container">
<div class="row">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</div>
</div>
</xsl:template>
<xsl:template match="//div[starts-with(@id, 'pg-')]">
<section>
<xsl:apply-templates select="@*|node()" />
</section>
</xsl:template>
</xsl:stylesheet>
不幸的是,它并没有产生我想要的东西:特别是,它确实在容器中包含了带有pgc
的元素,但它并没有将它们组合成只有一个父元素。这是现在输出的(每个部分):
<section id="pg-1">
<div class="container">
<div class="row">
<div id="pgc-1">
<div class="test">Hello World!</div>
</div>
</div>
</div>
<div class="container">
<div class="row">
<div id="pgc-2">
<div class="test">Hello World!</div>
</div>
</div>
</div>
</section>
作为我想做的总结:
id
属性从pg-
开始的所有元素的标记名称更改为section
(我应将所有属性复制到新元素)id
下具有pgc-
属性的div以.container > .row
开头的所有子元素包裹起来(我应将所有属性复制到新元素)答案 0 :(得分:1)
我猜*你想做点什么:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="div[starts-with(@id, 'pg-')]">
<section>
<xsl:copy-of select="@*"/>
<div class="container">
<div class="row">
<xsl:apply-templates />
</div>
</div>
</section>
</xsl:template>
</xsl:stylesheet>
-
(*)只有一个(有缺陷的)例子,没有规定的规则,所有人都能猜到。