无论如何我可以使用xpath选择仅包含空格(  ,   , 	
)的节点。
这是一个例子,
<doc>
<p> </p>
<p> </p>
<p> </p>
<p>text</p>
<p> text</p>
<p> text</p>
</doc>
我需要选择仅包含空白元素的前3个<p>
节点
答案 0 :(得分:2)
您需要应用translate
并检查仅包含空格的此类节点的长度。
为您演示:http://xsltransform.net/ejivdHb/22
所以,试试
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns1="http://locomotive/bypass/docx" >
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="p">
<!-- Select only node with white spaces -->
<xsl:if test="string-length(translate(., ' 	

','')) = 0">
<xsl:copy-of select="." />
</xsl:if>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:1)
要选择非空的/doc/p[string() and not(normalize-space())]
个节点,但只包含空格字符,请使用:
<xsl:stylesheet version="1.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="/doc">
<xsl:copy>
<xsl:copy-of select="p[string() and not(normalize-space())]"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
例如,以下样式表:
XSLT 1.0
<doc>
<p/>
<p> </p>
<p> </p>
<p> </p>
<p>text</p>
<p> text</p>
<p> text</p>
</doc>
应用于以下示例输入时:
<强> XML 强>
<?xml version="1.0" encoding="UTF-8"?>
<doc>
<p> </p>
<p> </p>
<p> </p>
</doc>
将返回:
<强>结果强>
<ul>
{{#each items}}
<li>{{agree_button}}</li>
{{/each}}
</ul>
答案 2 :(得分:1)
请注意,空格的普通XML定义不包括NBSP字符(xA0)。
要选择包含一个或多个空格字符的节点,而没有其他任何内容,其中空格意味着x9,xa,xd,x20和xa0,您可以这样做(在XPath 2.0中)
select="//*[matches(., '[	

  ]+')]"
或者你可以考虑
select="//*[matches(., '[\p{Z}]+')]"
匹配许多其他类似空间的字符,如em-space,en-space,thin-space,hair-space,表意空间等。
答案 3 :(得分:-1)
您可以使用以下xpath仅选择包含空格的节点:
//*[normalize-space(text())='']