0

我的 XHTML 中的这个 XSL 转换有问题。

我的源文档的插图:

<blockquote>
    <center>
       <h1>CHAPTER 100. RANDOM TEXT HERE </h1>
    </center>
    <center>
       <h1>CHAPTER 200. RANDOM TEXT HERE </h1>
    </center>
</blockquote>

我想要的输出:

<title chapter="100"> CHAPTER 100. RULES OF SOMETHING TEXT HERE </title>
<title chapter="200"> CHAPTER 200. RULES OF SOMETHING TEXT HERE </title>

关于如何将它添加到我的 XSLT 样式表的任何想法?我会在这里使用正则表达式来帮助我匹配 # 章吗?

提前致谢。

4

3 回答 3

3

嗯,它会涉及到类似的东西

<xsl:template match="h1">
  <title chapter="{replace(., 'CHAPTER\s+(\d+)', '$1')}">
    <xsl:apply-templates/>
  </title>
</xsl:template>
于 2012-09-21T21:39:59.623 回答
1

给定所示表单的输入,在 XSLT 1.0 中,您可以执行以下操作(未经测试):

<xsl:template match="h1">
  <title chapter="{
      substring-before(
        substring-after(.,'CHAPTER '),
        '. '
      )}">
    <xsl:apply-templates/>
  </title>
</xsl:template>

这可能会在不规则输入上产生次优结果。

在 XSLT 2.0 中,您拥有(正如 Michael Kay 刚刚观察到的)一组更丰富的正则表达式函数,可以让您更方便地处理输入中的一些不规则性;,matches()和函数值得一读tokenize()replace()

于 2012-09-21T21:44:32.197 回答
0

假设源是 HTML,您希望将其转换为纯 XML。

我会将整个源文档加载到 DOM 树中,然后从那里创建目标 XML。几乎所有语言都可以将源代码从字符串或文件读取到 DOM 树中。SAX 解析器也可用于此目的,只需为解析器编写代码以将输入转换为所需的输出。

我猜它也可以使用正则表达式来完成,但是没有办法检查输出的有效性,使用真正的树/解析器具有所有这些功能(天气 DOM/SAX 等)。

于 2012-09-21T20:58:28.087 回答