从XHTML文档中删除特定标记的机制(但保留其内容)?

时间:2010-09-05 01:32:14

标签: c# .net xslt xpath xquery

我想要一种简单易用的方法从XHTML文档中删除标签,并且相信在所有选项中都必须有足够的东西,例如:XSLT,XPath,XQuery,使用.NET XML命名空间的自定义C#编程。我向其他人开放。

  

例如,我想从XHTML文档中删除所有 <b> 标记,但   保留其内在内容和子标签   (即不要简单地跳过粗体标签和   它的孩子们。)

我需要保持原始文档的结构减去剥离的标签。

思想:

  • 我见过 XSLT 匹配元素以供选择的能力;但是我希望在默认情况下匹配所有内容,但有一些例外,我不确定它是否有利于此。这就是我现在正在看的。

  • XQuery 我还没有开始研究。 ( XQuery更新:简要介绍一下这项技术,它在功能上与SQL相当,我没能看到它如何维护原始文档的嵌套节点结构 - 我认为这不是竞争者。)

  • 自定义 C#/。NET XML命名空间程序可能是可行的,因为我已经有了它的想法,但我的直接假设是它可能更多涉及这些原因创建了其他特定于XML的匹配语言。

  • ......另一种启用技术我还没有考虑过......

1 个答案:

答案 0 :(得分:3)

  

我需要保持结构   原始文件减去   剥离标签

你有没有想过XSLT?这是专为转换XML和一般树结构而设计的语言。

此转化

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

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

 <xsl:template match="b">
  <xsl:apply-templates/>
 </xsl:template>
</xsl:stylesheet>

应用于任何XHTML文档时,如下所示

<html>
 <head/>
 <body>
  <p> Hello, <b>World</b>!</p>
 </body>
</html>

生成想要的正确结果,在这种情况下:

<html>
   <head/>
   <body>
      <p> Hello, World!</p>
   </body>
</html>