为后续 xslt 2 处理转义文本
unescape text for subsequent xslt 2 processing
我得到一个输入文件托管像
这样的元素
<item>
<Description>
Intro 1
<b>Title</b>
Intro 2
<ul>
<li>item 1</li>
<li><b>item 2</b></li>
</ul>
Finish
</Description>
</item>
我想创建一个 xslt2 模板或函数,将其转换为 node() 之类的
<item>
<Description>
Intro 1
<b>Title</b>
Intro 2
<ul>
<li>item 1</li>
<li><b>item 2</b></li>
</ul>
Finish
</Description>
</item>
进一步处理。
有什么实现方法的建议吗?
David Carlisle 在 XSLT 2 中实现了一个 HTML 解析器,您可以在 https://github.com/davidcarlisle/web-xslt/blob/master/htmlparse/htmlparse.xsl 找到它并将其用作
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:d="data:,dpc"
exclude-result-prefixes="#all"
version="3.0">
<xsl:import href="https://github.com/davidcarlisle/web-xslt/raw/master/htmlparse/htmlparse.xsl"/>
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="Description">
<xsl:copy>
<xsl:apply-templates select="d:htmlparse(., '', true())/node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
得到类似
的结果
<item>
<Description>
Intro 1
<b>Title</b>
Intro 2
<ul>
<li>item 1</li>
<li><b>item 2</b></li>
Finish
</ul></Description>
如果输入格式正确 XML 您也可以使用 XSLT 3/XPath 3 的 parse-xml-fragment
函数,但如果没有关闭 </ul>
您的示例无法解析为 XML.
我得到一个输入文件托管像
这样的元素<item>
<Description>
Intro 1
<b>Title</b>
Intro 2
<ul>
<li>item 1</li>
<li><b>item 2</b></li>
</ul>
Finish
</Description>
</item>
我想创建一个 xslt2 模板或函数,将其转换为 node() 之类的
<item>
<Description>
Intro 1
<b>Title</b>
Intro 2
<ul>
<li>item 1</li>
<li><b>item 2</b></li>
</ul>
Finish
</Description>
</item>
进一步处理。
有什么实现方法的建议吗?
David Carlisle 在 XSLT 2 中实现了一个 HTML 解析器,您可以在 https://github.com/davidcarlisle/web-xslt/blob/master/htmlparse/htmlparse.xsl 找到它并将其用作
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:d="data:,dpc"
exclude-result-prefixes="#all"
version="3.0">
<xsl:import href="https://github.com/davidcarlisle/web-xslt/raw/master/htmlparse/htmlparse.xsl"/>
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="Description">
<xsl:copy>
<xsl:apply-templates select="d:htmlparse(., '', true())/node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
得到类似
的结果<item>
<Description>
Intro 1
<b>Title</b>
Intro 2
<ul>
<li>item 1</li>
<li><b>item 2</b></li>
Finish
</ul></Description>
如果输入格式正确 XML 您也可以使用 XSLT 3/XPath 3 的 parse-xml-fragment
函数,但如果没有关闭 </ul>
您的示例无法解析为 XML.