首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将具有特定id的节点包装在同一父节点下。

将具有特定id的节点包装在同一父节点下。
EN

Stack Overflow用户
提问于 2017-05-15 08:23:58
回答 1查看 44关注 0票数 0

我想转换以下HTML代码

代码语言:javascript
复制
<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>

进入到这个

代码语言:javascript
复制
<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文档正常工作:

代码语言:javascript
复制
<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>

不幸的是,它并没有产生我想要的结果:特别是,它确实在容器中用id pgc包装元素,但是它并没有将它们分组为一个父元素。这就是现在输出的内容(对于每个部分):

代码语言:javascript
复制
<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属性的div在同一个父节点.container > .row下以pgc-开头的子元素(我应该将所有属性复制到新元素中)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-15 08:41:34

我猜*你想做这样的事:

XSLT1.0

代码语言:javascript
复制
<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>

--

(*)只有一个(有缺陷的)例子,而且没有规定的规则,人们所能做的就是猜测。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43974594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档