如何保留 xml 文档中的所有标签、结构和文本,仅用 XSLT 替换一些? [英] How do I preserve all tags, structure and text in an xml document replacing only some with XSLT?

查看:23
本文介绍了如何保留 xml 文档中的所有标签、结构和文本,仅用 XSLT 替换一些?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在尝试将简单的 xsl 样式应用于 xml 文档:

I've been trying to apply a simple xsl style to an xml document:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="/">
    <html>
      <body>

        <xsl:for-each select="//title">
          <h1><xsl:value-of select="."/></h1>
        </xsl:for-each>

      </body>
    </html>
  </xsl:template>

</xsl:stylesheet>

不幸的是,这似乎只是简单地忽略所有其他标签并从输出中删除它们及其内容,而我只剩下标题转换为 h1s.我希望能够做的是保留我的文档结构,同时只替换其中的一些标签.

Unfortunately, this seems to just simply ignore all other tags and remove them as well as their contents from the output, and I'm only left with titles converted to h1s. What I would like to be able to do is to have my document's structure remain, while replacing only some of its tags.

例如,如果我有这个文档:

So that for example if I have this document:

<section>
  <title>Hello world</title>
  <p>Hello!</p>
</section>

我可以得到这个:

<section>
  <h1>Hello world</h1>
  <p>Hello!</p>
</section>

不太确定从 XSLT 手册的何处开始查找.

No quite sure where in the XSLT manual to start looking.

推荐答案

正如 O. R. Mapper 所说,解决这个问题的方法是向您的转换添加一个标识模板,并只覆盖您需要的部分.这将是完整的解决方案:

As O. R. Mapper says, the solution to this is to add an identity template to your transform and just override the parts you need to. This would be the complete solution:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="yes" omit-xml-declaration="yes"/>

  <!-- Identity template -->
  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="/">
    <html>
      <body>
        <xsl:apply-templates select="@* | node()" />
      </body>
    </html>
  </xsl:template>

  <xsl:template match="title">
    <h1>
      <xsl:apply-templates select="@* |node()" />
    </h1>
  </xsl:template>
</xsl:stylesheet>

在您的示例输入上运行时,会产生:

When run on your sample input, this produces:

<html>
  <body>
    <section>
      <h1>Hello world</h1>
      <p>Hello!</p>
    </section>
  </body>
</html>

如果您真的只想保留原始 XML 但替换 </code>,您可以删除中间的 <code><xsl:template></code> 并且您应该得到结果:<em class="showen"></em></p> <p class="en">If you really just want to preserve your original XML but replace the <code><title></code>, you can just remove the middle <code><xsl:template></code> and you should get the result:</p> <pre><code><code><section> <h1>Hello world</h1> <p>Hello!</p> </section> </code></code></pre> <p>这篇关于如何保留 xml 文档中的所有标签、结构和文本,仅用 XSLT 替换一些?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!</p> </div> <div class="arc-body-main-more"> <span onclick="unlockarc('2502696');">查看全文</span> </div> </div> <div> </div> <div class="wwads-cn wwads-horizontal" data-id="166" style="max-width:100%;border: 4px solid #666;"></div> </div> </article> <div id="arc-ad-2" class="mb-1"> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5038752844014834" crossorigin="anonymous"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5038752844014834" data-ad-slot="3921941283"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="widget bgwhite radius-1 mb-1 shadow widget-rel"> <h5>相关文章</h5> <ul> <li> <a target="_blank" title="(xslt 1.0) 如何用 xml 中所有文本值中的一些字符串替换空格?" href="/2501307.html"> (xslt 1.0) 如何用 xml 中所有文本值中的一些字符串替换空格?; </a> </li> <li> <a target="_blank" title="如何使用 XSLT 将一些标签转换为另一些标签" href="/2505865.html"> 如何使用 XSLT 将一些标签转换为另一些标签; </a> </li> <li> <a target="_blank" title="当前一些页面和文档的页面数" href="/269237.html"> 当前一些页面和文档的页面数; </a> </li> <li> <a target="_blank" title="替换 XML 中的一些元素 [提供 XML 示例]" href="/2838586.html"> 替换 XML 中的一些元素 [提供 XML 示例]; </a> </li> <li> <a target="_blank" title="替换对象属性中的一些文本?" href="/2340518.html"> 替换对象属性中的一些文本?; </a> </li> <li> <a target="_blank" title="SVG/XML 中是否有一些innerHTML 替换?" href="/2666901.html"> SVG/XML 中是否有一些innerHTML 替换?; </a> </li> <li> <a target="_blank" title="如何向hr标签添加一些文本?" href="/576789.html"> 如何向hr标签添加一些文本?; </a> </li> <li> <a target="_blank" title="如何替换两点之间的所有线并用sed中的一些文本替换它" href="/2711891.html"> 如何替换两点之间的所有线并用sed中的一些文本替换它; </a> </li> <li> <a target="_blank" title="如何解析与一些标签冒号的XML?" href="/147830.html"> 如何解析与一些标签冒号的XML?; </a> </li> <li> <a target="_blank" title="MySQL 搜索并替换字段中的一些文本" href="/2588514.html"> MySQL 搜索并替换字段中的一些文本; </a> </li> <li> <a target="_blank" title="如何在输入字段中保留一些默认文本?" href="/877238.html"> 如何在输入字段中保留一些默认文本?; </a> </li> <li> <a target="_blank" title="在SVG / XML中是否有一些innerHTML替换?" href="/1005265.html"> 在SVG / XML中是否有一些innerHTML替换?; </a> </li> <li> <a target="_blank" title="对所有 XML 的通用替换 (XSLT)" href="/2506069.html"> 对所有 XML 的通用替换 (XSLT); </a> </li> <li> <a target="_blank" title="XSLT 替换属性值和文本节点中的文本" href="/2375488.html"> XSLT 替换属性值和文本节点中的文本; </a> </li> <li> <a target="_blank" title="XSLT 显示所有 XML 标签内容" href="/2316283.html"> XSLT 显示所有 XML 标签内容; </a> </li> <li> <a target="_blank" title="从指定位置的文件中替换一些文本" href="/1239437.html"> 从指定位置的文件中替换一些文本; </a> </li> <li> <a target="_blank" title="如何在保留html标签/结构的同时在html中查找/替换文本" href="/861904.html"> 如何在保留html标签/结构的同时在html中查找/替换文本; </a> </li> <li> <a target="_blank" title="如何在单词中查找TextBox并用一些文本替换它们" href="/1272546.html"> 如何在单词中查找TextBox并用一些文本替换它们; </a> </li> <li> <a target="_blank" title="如何使用值和文本绑定枚举并包含一些带有文本的空格" href="/1207583.html"> 如何使用值和文本绑定枚举并包含一些带有文本的空格; </a> </li> <li> <a target="_blank" title="如何在JavaScript中替换一些字符串变量的文本?" href="/652091.html"> 如何在JavaScript中替换一些字符串变量的文本?; </a> </li> <li> <a target="_blank" title="OpenXML替换所有文档中的文本" href="/1647929.html"> OpenXML替换所有文档中的文本; </a> </li> <li> <a target="_blank" title="强制标签文本从左到右,同时包含一些从右到左的文本" href="/2276608.html"> 强制标签文本从左到右,同时包含一些从右到左的文本; </a> </li> <li> <a target="_blank" title="搜索包含一些文本的行,替换整行 python" href="/2375472.html"> 搜索包含一些文本的行,替换整行 python; </a> </li> <li> <a target="_blank" title="迭代python中的xml元素时缺少一些文本" href="/1584622.html"> 迭代python中的xml元素时缺少一些文本; </a> </li> <li> <a target="_blank" title="如何通过一些文本替换和编辑来复制PDF" href="/1120302.html"> 如何通过一些文本替换和编辑来复制PDF; </a> </li> </ul> </div> <div class="mb-1"> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5038752844014834" crossorigin="anonymous"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5038752844014834" data-ad-slot="3921941283"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div> <div class="side"> <div class="widget widget-side bgwhite mb-1 shadow"> <h5>其他开发最新文章</h5> <ul> <li> <a target="_blank" title="拒绝显示一个框架,因为它将'X-Frame-Options'设置为'sameorigin'" href="/893060.html"> 拒绝显示一个框架,因为它将'X-Frame-Options'设置为'sameorigin'; </a> </li> <li> <a target="_blank" title="什么是&QUOT; AW&QUOT;在部分标志属性是什么意思?" href="/303988.html"> 什么是&QUOT; AW&QUOT;在部分标志属性是什么意思?; </a> </li> <li> <a target="_blank" title="在运行npm install命令时获取'npm WARN弃用'警告" href="/840917.html"> 在运行npm install命令时获取'npm WARN弃用'警告; </a> </li> <li> <a target="_blank" title="cmake无法找到openssl" href="/516280.html"> cmake无法找到openssl; </a> </li> <li> <a target="_blank" title="从Spark的scala中的* .tar.gz压缩文件中读取HDF5文件" href="/850628.html"> 从Spark的scala中的* .tar.gz压缩文件中读取HDF5文件; </a> </li> <li> <a target="_blank" title="Twitter :: Error :: Forbidden - 无法验证您的凭据" href="/630061.html"> Twitter :: Error :: Forbidden - 无法验证您的凭据; </a> </li> <li> <a target="_blank" title="我什么时候需要一个fb:app_id或者fb:admins?" href="/747981.html"> 我什么时候需要一个fb:app_id或者fb:admins?; </a> </li> <li> <a target="_blank" title="将.db文件导入R" href="/902960.html"> 将.db文件导入R; </a> </li> <li> <a target="_blank" title="npm通知创建一个lockfile作为package-lock.json。你应该提交这个文件" href="/744854.html"> npm通知创建一个lockfile作为package-lock.json。你应该提交这个文件; </a> </li> <li> <a target="_blank" title="拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“script-src'self'”" href="/819167.html"> 拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“script-src'self'”; </a> </li> </ul> </div> <div class="widget widget-side bgwhite mb-1 shadow"> <h5> 热门教程 </h5> <ul> <li> <a target="_blank" title="Java教程" href="/OnLineTutorial/java/index.html"> Java教程 </a> </li> <li> <a target="_blank" title="Apache ANT 教程" href="/OnLineTutorial/ant/index.html"> Apache ANT 教程 </a> </li> <li> <a target="_blank" title="Kali Linux教程" href="/OnLineTutorial/kali_linux/index.html"> Kali Linux教程 </a> </li> <li> <a target="_blank" title="JavaScript教程" href="/OnLineTutorial/javascript/index.html"> JavaScript教程 </a> </li> <li> <a target="_blank" title="JavaFx教程" href="/OnLineTutorial/javafx/index.html"> JavaFx教程 </a> </li> <li> <a target="_blank" title="MFC 教程" href="/OnLineTutorial/mfc/index.html"> MFC 教程 </a> </li> <li> <a target="_blank" title="Apache HTTP客户端教程" href="/OnLineTutorial/apache_httpclient/index.html"> Apache HTTP客户端教程 </a> </li> <li> <a target="_blank" title="Microsoft Visio 教程" href="/OnLineTutorial/microsoft_visio/index.html"> Microsoft Visio 教程 </a> </li> </ul> </div> <div class="widget widget-side bgwhite mb-1 shadow"> <h5> 热门工具 </h5> <ul> <li> <a target="_blank" title="Java 在线工具" href="/Onlinetools/details/4"> Java 在线工具 </a> </li> <li> <a target="_blank" title="C(GCC) 在线工具" href="/Onlinetools/details/6"> C(GCC) 在线工具 </a> </li> <li> <a target="_blank" title="PHP 在线工具" href="/Onlinetools/details/8"> PHP 在线工具 </a> </li> <li> <a target="_blank" title="C# 在线工具" href="/Onlinetools/details/1"> C# 在线工具 </a> </li> <li> <a target="_blank" title="Python 在线工具" href="/Onlinetools/details/5"> Python 在线工具 </a> </li> <li> <a target="_blank" title="MySQL 在线工具" href="/Onlinetools/Dbdetails/33"> MySQL 在线工具 </a> </li> <li> <a target="_blank" title="VB.NET 在线工具" href="/Onlinetools/details/2"> VB.NET 在线工具 </a> </li> <li> <a target="_blank" title="Lua 在线工具" href="/Onlinetools/details/14"> Lua 在线工具 </a> </li> <li> <a target="_blank" title="Oracle 在线工具" href="/Onlinetools/Dbdetails/35"> Oracle 在线工具 </a> </li> <li> <a target="_blank" title="C++(GCC) 在线工具" href="/Onlinetools/details/7"> C++(GCC) 在线工具 </a> </li> <li> <a target="_blank" title="Go 在线工具" href="/Onlinetools/details/20"> Go 在线工具 </a> </li> <li> <a target="_blank" title="Fortran 在线工具" href="/Onlinetools/details/45"> Fortran 在线工具 </a> </li> </ul> </div> </div> </div> <script type="text/javascript">var eskeys = '如何,保留,xml,文档,中,的,所有,标签,结构,和,文本,仅用,xslt,替换,一些'; var cat = 'cc';';//other-dev</script> </div> <div id="pop" onclick="pophide();"> <div id="pop_body" onclick="event.stopPropagation();"> <h6 class="flex flex101"> 登录 <span onclick="pophide();">关闭</span> </h6> <div class="pd-1"> <div class="wxtip center"> <span>扫码关注<em>1秒</em>登录</span> </div> <div class="center"> <img id="qr" src="https://huajiakeji.com/Content/Images/qrydx.jpg" alt="" style="width:150px;height:150px;" /> </div> <div style="margin-top:10px;display:flex;justify-content: center;"> <input type="text" placeholder="输入验证码" id="txtcode" autocomplete="off" /> <input id="btngo" type="button" onclick="chk()" value="GO" /> </div> <div class="center" style="margin: 4px; font-size: .8rem; color: #f60;"> 发送“验证码”获取 <em style="padding: 0 .5rem;">|</em> <span style="color: #01a05c;">15天全站免登陆</span> </div> <div id="chkinfo" class="tip"></div> </div> </div> </div> <script type="text/javascript" src="https://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js"></script> <script type="text/javascript" src="https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.min.js"></script> <script type="text/javascript" src="https://img01.yuandaxia.cn/Scripts/highlight.min.js"></script> <script type="text/javascript" src="https://img01.yuandaxia.cn/Scripts/base.js?v=0.22"></script> <script type="text/javascript" src="https://img01.yuandaxia.cn/Scripts/tui.js?v=0.11"></script> <footer class="footer"> <div class="container"> <div class="flink mb-1"> 友情链接: <a href="https://www.it1352.com/" target="_blank">IT屋</a> <a href="https://huajiakeji.com/" target="_blank">Chrome插件</a> <a href="https://www.cnplugins.com/" target="_blank">谷歌浏览器插件</a> </div> <section class="copyright-section"> <a href="https://www.it1352.com" title="IT屋-程序员软件开发技术分享社区">IT屋</a> ©2016-2022 <a href="http://www.beian.miit.gov.cn/" target="_blank">琼ICP备2021000895号-1</a> <a href="/sitemap.html" target="_blank" title="站点地图">站点地图</a> <a href="/Home/Tags" target="_blank" title="站点标签">站点标签</a> <a target="_blank" alt="sitemap" href="/sitemap.xml">SiteMap</a> <a href="/1155981.html" title="IT屋-免责申明"><免责申明></a> 本站内容来源互联网,如果侵犯您的权益请联系我们删除. </section> <!--统计代码--> <script type="text/javascript"> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?0c3a090f7b3c4ad458ac1296cb5cc779"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> <script type="text/javascript"> (function () { var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </div> </footer> </body> </html>