反正我有可以選擇的節點只包含使用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