如何在切换两个元素的顺序时更改属性值

  • 本文关键字:顺序 元素 属性 两个 xslt-2.0
  • 更新时间 :
  • 英文 :


我需要切换两个元素的顺序,然后更改两个元素的类名。

这是切换部分:

  <xsl:template match="div[@id='container-4']/div[starts-with(@class,'df-width-40')]">
        <xsl:copy-of select="div[@id='container-5']/div[@class='df-width-100']/div" />
   </xsl:template>

    <xsl:template match="div[@id='container-5']/div[@class='df-width-100']">
        <xsl:copy-of select="div[@id='container-4']/div[@class='df-width-40']/div" />
    </xsl:template>

上面的代码应该执行以下操作:将 #container-4 中的div.df-width-40 替换为 #container-5 中的div.df-width-100。

然后将 #container-5 中的div.df-width-100 替换为 #container-4 中的div.df-width-40。

基本上只是在 #container-4 和 #container-5 中切换子div。

但我还需要更改类名,以便div.df-width-40 将名称更改为div.df-width-100,并且副 verca

原文 xml:

<div id="container-4">
    <div class="df-width-40">lorem</div>
</div>
<div id="container-5">
    <div class="df-width-100">ipsum</div>
</div>

xslt 之后想要的结果:

<div id="container-4">
    <div class="df-width-40">ipsum</div>
</div>
<div id="container-5">
    <div class="df-width-100">lorem</div>
</div>

警告:由于复杂的布局和我无法控制的动态内容,我无法仅获取div 的内容。为清楚起见,xpath 和元素类名已减少。

如果您复制现有的div 及其属性,然后只交换div 的内容,如

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="div[@id='container-4']/div[starts-with(@class,'df-width-40')]">
        <xsl:copy>
            <xsl:apply-templates select="@*, 
            ../following-sibling::div[@id='container-5']/div[@class='df-width-100']/node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="div[@id='container-5']/div[@class='df-width-100']">
       <xsl:copy>
            <xsl:apply-templates select="@*, 
            ../preceding-sibling::div[@id='container-4']/div[@class='df-width-40']/node()"/>           
       </xsl:copy>
    </xsl:template>
</xsl:transform>

然后你应该得到你想要的结果,

<?xml version="1.0" encoding="UTF-8"?>
<body>
<div id="container-4">
    <div class="df-width-40">lorem</div>
</div>
<div id="container-5">
    <div class="df-width-100">ipsum</div>
</div>
</body>

被转化为

<?xml version="1.0" encoding="UTF-8"?><body>
<div id="container-4">
    <div class="df-width-40">ipsum</div>
</div>
<div id="container-5">
    <div class="df-width-100">lorem</div>
</div>
</body>

http://xsltransform.net/bEzjRJm

最新更新