怎么利用xslt在xml源树上消除没有值的节点

airu3296 2016-10-25 10:25:13
我用xslt解析word,发现word里面有很多空的段落,如下图


我想获得一个段落的节点集,这个节点集不能包含空段落
于是我写了如下代码:
<xsl:variable name="commonPara" select="//w:p[w:r/w:t][normalize-space(w:r/w:t)!=''][not(w:pPr/w:pStyle)]" />
这个代码里面 "//w:p[w:r/w:t] 表示选择段落,且这个段落里面要有w:r/w:t节点
[normalize-space(w:r/w:t)!='' 表示 删除w:r/w:t元素两边的空格之后 内容不能等于空字符串

这样写会报如下错误
...全文
194 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
rickylin86 2016-10-25
  • 打赏
  • 举报
回复

如果你的需求是当前w:p下面的所有w:r/w:t内容合并后不等于空的话那么可以如下写.
<xsl:variable name="commonPara" select="//w:p[w:r/w:t][normalize-space(string-join(w:r/w:t,''))!=''][not(w:pPr/w:pStyle)]" />
string-join($sequence,'')这个函数的作用是将第一个节点序列参数中的元素合并成一个字符串.并且元素之间用第二个参数指定的值进行分隔
rickylin86 2016-10-25
  • 打赏
  • 举报
回复
normalize-space这个函数只能传入的是一个节点或者原子值或者是单个节点的序列或者空序列.解析器运行的时候检测到你传入的是传入的是一个序列,并且序列内部的元素数量超过1个.所以自然会报错
airu3296 2016-10-25
  • 打赏
  • 举报
回复
哦 是不是normalize-space要用for循环每个节点啊。我的问题是 :如何能或者不包含空段落的段落序列
airu3296 2016-10-25
  • 打赏
  • 举报
回复
引用 3 楼 rickylin86 的回复:

如果你的需求是当前w:p下面的所有w:r/w:t内容合并后不等于空的话那么可以如下写.
<xsl:variable name="commonPara" select="//w:p[w:r/w:t][normalize-space(string-join(w:r/w:t,''))!=''][not(w:pPr/w:pStyle)]" />
string-join($sequence,'')这个函数的作用是将第一个节点序列参数中的元素合并成一个字符串.并且元素之间用第二个参数指定的值进行分隔
谢谢你大神,在csdn里面就你人品最好,非常非常感谢你

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧