将多个XML标签重命名为不同的名称。

huangapple go评论107阅读模式
英文:

Rename Multiple XML tags to different name

问题

我正在寻求将标签转换为其他格式,但只转换父标签,而不转换子标签。
我希望在不改变结构的情况下转换标签。

例如:

  1. <section name="ABC">
  2. <section name="123">
  3. <p>Data</p>
  4. <p>Data</p>
  5. <p>Data</p>
  6. </section>
  7. <section name="456">
  8. <table>
  9. <tr>
  10. <td><p>Data</p></td>
  11. <td><p>Data</p></td>
  12. <td><p>Data</p></td>
  13. </tr>
  14. </table>
  15. </section>
  16. <section name="232">
  17. <bold><p>Data</p></bold>
  18. </section>
  19. </section>

转换为:

  1. <div class="ABC">
  2. <div class="123">
  3. <h1>Data</h1>
  4. <h1>Data</h1>
  5. <h1>Data</h1>
  6. </div>
  7. <div class="456">
  8. <table>
  9. <tr>
  10. <td><h1>Data</h1></td>
  11. <td><h1>Data</h1></td>
  12. <td><h1>Data</h1></td>
  13. </tr>
  14. </table>
  15. </div>
  16. <div class="232">
  17. <bold><h1>Data</h1></bold>
  18. </div>
  19. </div>

这是我在XSLT转换中编写的代码。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3. <xsl:strip-space elements="*"/>
  4. <xsl:template match="section">
  5. <div class="{@name}">
  6. <xsl:apply-templates select="node()"/>
  7. </div>
  8. </xsl:template>
  9. <xsl:template match="p">
  10. <h1>
  11. <xsl:apply-templates select="node()"/>
  12. </h1>
  13. </xsl:template>
  14. <xsl:template match="table">
  15. <table>
  16. <xsl:apply-templates select="node()"/>
  17. </table>
  18. </xsl:template>
  19. <xsl:template match="tr">
  20. <tr>
  21. <xsl:apply-templates select="node()"/>
  22. </tr>
  23. </xsl:template>
  24. <xsl:template match="td">
  25. <td>
  26. <xsl:apply-templates select="node()"/>
  27. </td>
  28. </xsl:template>
  29. <xsl:template match="image">
  30. <img>
  31. <xsl:apply-templates select="node()"/>
  32. </img>
  33. </xsl:template>
  34. <xsl:template match="/">
  35. <html>
  36. <body>
  37. <xsl:apply-templates/>
  38. </body>
  39. </html>
  40. </xsl:template>
  41. </xsl:stylesheet>

一切都运行正常,但所有属性都被删除,我只得到标签而不是属性值。我想要保留所有属性并仅更改特定属性的名称。

英文:

I am looking to transform tag to other format but it is transform only parent tags not child tags.
I want to transform the tag without change in the structure.

Eg:

  1. &lt;section name=&quot;ABC&quot;&gt;
  2. &lt;section name=&quot;123&quot;&gt;
  3. &lt;p&gt;Data&lt;/p&gt;
  4. &lt;p&gt;Data&lt;/p&gt;
  5. &lt;p&gt;Data&lt;/p&gt;
  6. &lt;/section&gt;
  7. &lt;section name=&quot;456&quot;&gt;
  8. &lt;table&gt;
  9. &lt;tr&gt;
  10. &lt;td&gt;&lt;p&gt;Data&lt;/p&gt;&lt;/td&gt;
  11. &lt;td&gt;&lt;p&gt;Data&lt;/p&gt;&lt;/td&gt;
  12. &lt;td&gt;&lt;p&gt;Data&lt;/p&gt;&lt;/td&gt;
  13. &lt;/tr&gt;
  14. &lt;/table&gt;
  15. &lt;/section&gt;
  16. &lt;section name=&quot;232&quot;&gt;
  17. &lt;bold&gt;&lt;p&gt;Data&lt;/p&gt;&lt;/bold&gt;
  18. &lt;/section&gt;
  19. &lt;/section&gt;

to

  1. &lt;div class=&quot;ABC&quot;&gt;
  2. &lt;div class=&quot;123&quot;&gt;
  3. &lt;h1&gt;Data&lt;/h1&gt;
  4. &lt;h1&gt;Data&lt;/h1&gt;
  5. &lt;h1&gt;Data&lt;/h1&gt;
  6. &lt;/div&gt;
  7. &lt;div class=&quot;456&quot;&gt;
  8. &lt;table&gt;
  9. &lt;tr&gt;
  10. &lt;td&gt;&lt;h1&gt;Data&lt;/h1&gt;&lt;/td&gt;
  11. &lt;td&gt;&lt;h1&gt;Data&lt;/h1&gt;&lt;/td&gt;
  12. &lt;td&gt;&lt;h1&gt;Data&lt;/h1&gt;&lt;/td&gt;
  13. &lt;/tr&gt;
  14. &lt;/table&gt;
  15. &lt;/div&gt;
  16. &lt;div class=&quot;232&quot;&gt;
  17. &lt;bold&gt;&lt;h1&gt;Data&lt;/h1&gt;&lt;/bold&gt;
  18. &lt;/div&gt;
  19. &lt;/div&gt;

This is what i have written in XSLT transformation.

  1. &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
  2. &lt;xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&gt;
  3. &lt;xsl:strip-space elements=&quot;*&quot;/&gt;
  4. &lt;xsl:template match=&quot;section&quot;&gt;&lt;div&gt;&lt;xsl:apply-templates select=&quot;node()&quot;/&gt;&lt;/div&gt;&lt;/xsl:template&gt;
  5. &lt;xsl:template match=&quot;p&quot;&gt;&lt;p&gt;&lt;xsl:apply-templates select=&quot;node()&quot;/&gt;&lt;/p&gt;&lt;/xsl:template&gt;
  6. &lt;xsl:template match=&quot;table&quot;&gt;&lt;table&gt;&lt;xsl:apply-templates select=&quot;node()&quot;/&gt;&lt;/table&gt;&lt;/xsl:template&gt;
  7. &lt;xsl:template match=&quot;row&quot;&gt;&lt;tr&gt;&lt;xsl:apply-templates select=&quot;node()&quot;/&gt;&lt;/tr&gt;&lt;/xsl:template&gt;
  8. &lt;xsl:template match=&quot;cell&quot;&gt;&lt;td&gt;&lt;xsl:apply-templates select=&quot;node()&quot;/&gt;&lt;/td&gt;&lt;/xsl:template&gt;
  9. &lt;xsl:template match=&quot;image&quot;&gt;&lt;img&gt;&lt;xsl:apply-templates select=&quot;node()&quot;/&gt;&lt;/img&gt;&lt;/xsl:template&gt;
  10. &lt;xsl:template match=&quot;/&quot;&gt;
  11. &lt;html&gt;
  12. &lt;body&gt;
  13. &lt;xsl:apply-templates/&gt;
  14. &lt;/body&gt;
  15. &lt;/html&gt;
  16. &lt;/xsl:template&gt;
  17. &lt;/xsl:stylesheet&gt;

Every thing is working fine but all attributes are getting timed i am getting only tags but not attribute values. I want to apply all attributes to be preserved and change name of specific attribute alone.

答案1

得分: 1

这应该可以完成任务:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3. <xsl:strip-space elements="*"/>
  4. <xsl:template match="section"><div><xsl:apply-templates select="@*|node()"/></div></xsl:template>
  5. <xsl:template match="p"><h1><xsl:apply-templates select="@*|node()"/></h1></xsl:template>
  6. <xsl:template match="table"><table><xsl:apply-templates select="@*|node()"/></table></xsl:template>
  7. <xsl:template match="row"><tr><xsl:apply-templates select="@*|node()"/></tr></xsl:template>
  8. <xsl:template match="cell"><td><xsl:apply-templates select="@*|node()"/></td></xsl:template>
  9. <xsl:template match="image"><img><xsl:apply-templates select="@*|node()"/></img></xsl:template>
  10. <xsl:template match="@name"><xsl:attribute name="class"><xsl:value-of select="."/></xsl:attribute></xsl:template>
  11. <!-- identity transformation -->
  12. <xsl:template match="@*|node()">
  13. <xsl:copy>
  14. <xsl:apply-templates select="@*|node()"/>
  15. </xsl:copy>
  16. </xsl:template>
  17. <xsl:template match="/">
  18. <html>
  19. <body>
  20. <xsl:apply-templates/>
  21. </body>
  22. </html>
  23. </xsl:template>
  24. </xsl:stylesheet>
英文:

That should do the Job:

  1. &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
  2. &lt;xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&gt;
  3. &lt;xsl:strip-space elements=&quot;*&quot;/&gt;
  4. &lt;xsl:template match=&quot;section&quot;&gt;&lt;div&gt;&lt;xsl:apply-templates select=&quot;@*|node()&quot;/&gt;&lt;/div&gt;&lt;/xsl:template&gt;
  5. &lt;xsl:template match=&quot;p&quot;&gt;&lt;h1&gt;&lt;xsl:apply-templates select=&quot;@*|node()&quot;/&gt;&lt;/h1&gt;&lt;/xsl:template&gt;
  6. &lt;xsl:template match=&quot;table&quot;&gt;&lt;table&gt;&lt;xsl:apply-templates select=&quot;@*|node()&quot;/&gt;&lt;/table&gt;&lt;/xsl:template&gt;
  7. &lt;xsl:template match=&quot;row&quot;&gt;&lt;tr&gt;&lt;xsl:apply-templates select=&quot;@*|node()&quot;/&gt;&lt;/tr&gt;&lt;/xsl:template&gt;
  8. &lt;xsl:template match=&quot;cell&quot;&gt;&lt;td&gt;&lt;xsl:apply-templates select=&quot;@*|node()&quot;/&gt;&lt;/td&gt;&lt;/xsl:template&gt;
  9. &lt;xsl:template match=&quot;image&quot;&gt;&lt;img&gt;&lt;xsl:apply-templates select=&quot;@*|node()&quot;/&gt;&lt;/img&gt;&lt;/xsl:template&gt;
  10. &lt;xsl:template match=&quot;@name&quot;&gt;&lt;xsl:attribute name=&quot;class&quot;&gt;&lt;xsl:value-of select=&quot;.&quot;/&gt;&lt;/xsl:attribute&gt;&lt;/xsl:template&gt;
  11. &lt;!-- identity transformation --&gt;
  12. &lt;xsl:template match=&quot;@*|node()&quot;&gt;
  13. &lt;xsl:copy&gt;
  14. &lt;xsl:apply-templates select=&quot;@*|node()&quot;/&gt;
  15. &lt;/xsl:copy&gt;
  16. &lt;/xsl:template&gt;
  17. &lt;xsl:template match=&quot;/&quot;&gt;
  18. &lt;html&gt;
  19. &lt;body&gt;
  20. &lt;xsl:apply-templates/&gt;
  21. &lt;/body&gt;
  22. &lt;/html&gt;
  23. &lt;/xsl:template&gt;
  24. &lt;/xsl:stylesheet&gt;

huangapple
  • 本文由 发表于 2020年8月11日 20:41:58
  • 转载请务必保留本文链接:https://go.coder-hub.com/63358375.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定