我有一个像这样的xml,
<doc>
<p>text1 <xml version="1.0" encoding="UTF-16"
standalone="yes"?> text2</p>
</doc>
我需要使用XSLT删除文本上方< and >
之间的文本内容。所以期望的产出是,
<doc>
<p>text1 text2</p>
</doc>
我尝试使用正则表达式,但我想知道如何在< and >
格式正则表达式之间捕获文本。
知道如何使用XSLT做到这一点吗?
答案 0 :(得分:1)
这应该有效。
(<(?:.?\n?)*>)
然后替换为“”(空)
输入:
<doc>
<p>text1 <xml version="1.0" encoding="UTF-16"
standalone="yes"?> text2</p>
</doc>
输出:
<doc>
<p>text1 text2</p>
</doc>
答案 1 :(得分:1)
只使用XSLT-1.0,您可以通过应用以下模板来实现:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />
<xsl:template match="p">
<xsl:value-of select="concat(normalize-space(substring-before(text(), '<')),' ',normalize-space(substring-after(text(), '>')))" />
</xsl:template>
<!-- identity template -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
此模板仅使用身份模板复制所有节点,并对所有<p>
元素应用特殊处理。
<p>
节点的特殊处理在text()
之前和<
之后提取>
节点,同时规范化space
字符的出现(将其数量减少到一)并连接结果。
就是这样。