反正我有可以选择的节点只包含使用XPath的空格(  ,   , 	
)..的XPath - 选择节点只包含空格
这里是一个例子,
<doc>
<p> </p>
<p> </p>
<p> </p>
<p>text</p>
<p> text</p>
<p> text</p>
</doc>
,我需要选择第3 <p>
节点只包含空格元素
反正我有可以选择的节点只包含使用XPath的空格(  ,   , 	
)..的XPath - 选择节点只包含空格
这里是一个例子,
<doc>
<p> </p>
<p> </p>
<p> </p>
<p>text</p>
<p> text</p>
<p> text</p>
</doc>
,我需要选择第3 <p>
节点只包含空格元素
请注意,空白的正常XML定义不包括NBSP字符(xA0)。
要选择包含一个或多个空白字符的节点,而不是其他,这里的空白意味着X9,XA,XD,X20和XA0,你可以做(XPath 2.0中)
select="//*[matches(., '[	

  ]+')]"
另外,您可以考虑
select="//*[matches(., '[\p{Z}]+')]"
许多其他类空字符匹配,如EM-空间,连接空间,薄空间,头发空间,表意空间等
请注意,'[\ p {Z}]'不包含' '水平制表符。 –
你每天都在学点东西! –
另请参阅:http://stackoverflow.com/a/40927273/3016153 –
您可以使用下面的XPath只选择含有空格节点:
您需要申请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>
要选择p
节点不为空,但只包含空格字符,请使用:
/doc/p[string() and not(normalize-space())]
例如,以下样式表:
XSLT 1.0
<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>
当施加到下面的示例输入:
XML
<doc>
<p/>
<p> </p>
<p> </p>
<p> </p>
<p>text</p>
<p> text</p>
<p> text</p>
</doc>
将返回:
结果
<?xml version="1.0" encoding="UTF-8"?>
<doc>
<p> </p>
<p> </p>
<p> </p>
</doc>
什么空节点,如'
'? –@ michael.hor257k,不需要选择空节点
– sanjay