2016-11-29 40 views
0

反正我有可以选择的节点只包含使用XPath的空格(  ,   , 	)..的XPath - 选择节点只包含空格

这里是一个例子,

<doc> 
    <p> </p> 
    <p> </p> 
    <p>   </p> 
    <p>text</p> 
    <p> text</p> 
    <p> text</p> 
</doc> 

,我需要选择第3 <p>节点只包含空格元素

+0

什么空节点,如'

'? –

+0

@ michael.hor257k,不需要选择空节点

sanjay

回答

1

请注意,空白的正常XML定义不包括NBSP字符(xA0)。

要选择包含一个或多个空白字符的节点,而不是其他,这里的空白意味着X9,XA,XD,X20和XA0,你可以做(​​XPath 2.0中)

select="//*[matches(., '[&#x9;&#xa;&#xd; &#xa0;]+')]" 

另外,您可以考虑

select="//*[matches(., '[\p{Z}]+')]" 

许多其他类空字符匹配,如EM-空间,连接空间,薄空间,头发空间,表意空间等

+0

请注意,'[\ p {Z}]'不包含' '水平制表符。 –

+0

你每天都在学点东西! –

+0

另请参阅:http://stackoverflow.com/a/40927273/3016153 –

-1

您可以使用下面的XPath只选择含有空格节点:

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(., ' &#9;&#xA;&#xD;','')) = 0"> 
      <xsl:copy-of select="." />  
     </xsl:if> 

</xsl:template> 

</xsl:stylesheet> 
1

要选择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>