XSLT:过滤一些标记后规范化空间
以下是一个源XML:XSLT:过滤一些标记后规范化空间,xslt,xslt-2.0,Xslt,Xslt 2.0,以下是一个源XML: <desc> first <useless> second</useless>third <useful>word</useful> </desc> 首先 第二三 单词 …我正试图“清理”,比如: 第一秒第三 单词 我的模板写作尝试从以下几点开始 <xsl:template match="desc"> <xsl:variable name=&
<desc> first
<useless> second</useless>third
<useful>word</useful>
</desc>
首先
第二三
单词
…我正试图“清理”,比如:
第一秒第三
单词
我的模板写作尝试从以下几点开始
<xsl:template match="desc">
<xsl:variable name="txt" select="."/>
<xsl:variable name="txt1" select="normalize-space($txt)"/>
<desc>
<xsl:value-of select="$txt1"/>
</desc>
</xsl:template>
<xsl:template match="useless">
<xsl:variable name="txt" select="."/>
<xsl:variable name="txt1" select="normalize-space($txt)"/>
<xsl:value-of select="$txt1"/>
</xsl:template>
…但显然这还不够
这是结果
<desc>first secondthird word</desc>
第一个第二个第三个单词
我做错了什么?与您展示的结果非常相似的结果可能由以下因素产生: XSLT2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="desc">
<desc>
<xsl:value-of select="normalize-space(string-join(text() | useless/text(), ' '))"/>
<xsl:copy-of select="useful"/>
</desc>
</xsl:template>
</xsl:stylesheet>
这是否符合你的目的还不清楚。如评论中所述,示例不能代替说明规则。与您展示的结果非常相似的结果可以通过以下方式产生: XSLT2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="desc">
<desc>
<xsl:value-of select="normalize-space(string-join(text() | useless/text(), ' '))"/>
<xsl:copy-of select="useful"/>
</desc>
</xsl:template>
</xsl:stylesheet>
这是否符合你的目的还不清楚。正如评论中所提到的,一个示例不能代替说明规则。我不知道这个示例如何解释要应用于“规范化”空白的规则。要“摆脱”元素节点并仅处理其内容,只需使用例如
并使用标识模板处理其余内容即可。但我还不知道哪些空白需要保留,哪些需要去除或规范化。你甚至想插入空格,或者想要的结果中second-third
之间的空格来自哪里?纯粹的标题“过滤后规范化”显然,可以通过以下方式来实现:首先通过删除要删除的元素的模式运行输入,将结果存储在变量中,然后通过规范化文本节点的第二种模式运行输入。只是我看不到你想要规范化的文本以及你想要在何时何地插入空格。谢谢。我不知道“模式”选项。我不知道如何使用它。。。可能是:在“无用”模板中?我看不出单个示例如何解释要应用于“规范化”空白的规则。要“摆脱”元素节点并仅处理其内容,只需使用例如
并使用标识模板处理其余内容即可。但我还不知道哪些空白需要保留,哪些需要去除或规范化。你甚至想插入空格,或者想要的结果中second-third
之间的空格来自哪里?纯粹的标题“过滤后规范化”显然,可以通过以下方式来实现:首先通过删除要删除的元素的模式运行输入,将结果存储在变量中,然后通过规范化文本节点的第二种模式运行输入。只是我看不到你想要规范化的文本以及你想要在何时何地插入空格。谢谢。我不知道“模式”选项。我不知道如何使用它。。。可能是:在“无用”模板中?谢谢,这正好符合我的目的:(1)规范化下面的空格(2)删除下面的标记,同时保留文本(3)在删除的标记后添加空格谢谢,这正好符合我的目的:(1)规范化下面的空格(2)删除下面的标记,同时保留文本(3)在移除的标记后添加空格