XSLT:如何解析XML标记中嵌入的HTML

时间:2018-09-27 10:57:56

标签: xslt xslt-3.0

我遇到这样的情况:XML标记具有需要在XSLT中解析的HTML代码。这是XML示例:

<note>
    <text>&lt;p&gt;This is a paragraph.&lt;/p&gt;&lt;p&gt;This is another paragraph.&lt;/p&gt;</text>
</note>

我希望将嵌入的段落元素存储在不同的变量中。

This is a paragraph.应该存储在一个变量中,This is another paragraph.应该存储在另一个变量中。

可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

XSLT 3.0支持使用parse-xml https://www.w3.org/TR/xpath-functions/#func-parse-xml解析XML文档或使用parse-xml-fragment https://www.w3.org/TR/xpath-functions/#func-parse-xml-fragment解析XML片段,在早期版本中,您将不得不依赖提供的特定于处理器的扩展或可实施的

您的转义代码看起来像XHTML片段,因此应该可以像https://xsltfiddle.liberty-development.net/bFDb2CQ中那样用parse-xml-fragment进行解析

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="#all"
    version="3.0">

  <xsl:mode on-no-match="shallow-copy"/>

  <xsl:output method="html" indent="yes" html-version="5"/>

  <xsl:template match="text">
      <div>
          <xsl:variable name="contents" select="parse-xml-fragment(.)"/>
          <xsl:variable name="p1" select="$contents/p[1]"/>
          <xsl:variable name="p2" select="$contents/p[2]"/>
          <xsl:sequence select="$p1, $p2"/>
      </div>
  </xsl:template>

</xsl:stylesheet>