2016-11-29 36 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>