0

输入 XML:

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Description><![CDATA[Audience: Andrew Reed, Senior Training Specialist, Microsoft Corporation<br/>This session is for individuals who spend significant time writing and creating documents and have some familiarity with Microsoft Word.<br/>Thanks.]]></Description>
</root>

XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
  <xsl:output method="html" indent="yes"/>
  <xsl:template  match="/root">
    <div>
      <xsl:value-of  disable-output-escaping="yes" select="Description"/>
    </div>
  </xsl:template>
</xsl:stylesheet>

我需要在第一次出现 BR 之后添加几个 BR 标签,即在受众行之后和其他描述开始之前。您能否修改我的 XSLT 以获得所需的输出?

所以我想要如下输出:

Audience: Andrew Reed, Senior Training Specialist, Microsoft Corporation


This session is for individuals who spend significant time writing and creating documents and have some familiarity with Microsoft Word.


Thanks.
4

1 回答 1

0

如果您的输入数据将<br/>元素作为实际元素而不是被转义,那就太好了,以便可以使用 XPath 直接选择它们。

但是由于它们是原样,您可以使用正则表达式替换,依赖于它们将始终符合有限范围的模式的假设。通常会警告您不要使用正则表达式解析 XML 或 HTML 这是正确的,因为正则表达式不是通用解决方案。但对于有限的用途,它们就足够了。

如果我猜对了你的要求,你可以使用类似的东西

<xsl:value-of select="replace(Description, '&lt;[Bb][Rr] ?/?>',
                                           '&#10;&#10;&#10;')"/>

这将为您提供您显示的示例输出,而不是在第一次出现 BR 后添加更多的 BR 标签。它会容忍一些变化,例如<br>or <BR />

这是假设您可以使用 XSLT 2.0,因为replace()在 1.0 中不可用。如果您仅限于 1.0,请告诉我。

于 2013-07-09T21:43:22.790 回答