我有以下的XML。
<section level="sect1">
<title>
<page num="1150"/>
<content-style font-style="bold">ORDER 62</content-style>
<content-style format="smallcaps">Costs</content-style>
</title>
</section>
我想在此检查title
中是否包含ORDER
字。
我试过
contains(//section[1]/title[1]/content-style[1]/text(),'ORDER')
但是有些情况下,字符串ORDER
可能是第二个内容样式的,或者某些字符串可能是第三个。
请让我知道找到它的一般方法。
由于
答案 0 :(得分:1)
contains(//section[1]/title[1]/content-style[1]/text(),'ORDER')
您在整个路径上执行contains
,在此表达式中明确说明使用[1]
获取每个元素的第一个元素。相反,根据您的描述,您希望其中包含“ORDER”的孩子content-style
,您应该按照以下方式执行此操作:
//section[1]/title[1]/content-style[text() = 'ORDER']
或者,如果可以添加空格:
//section[1]/title[1]/content-style[normalize-space(text()) = 'ORDER']
如果结果非空,则您在content-style
下面的任何title[1]
中找到至少一个“订单”,低于section[1]
。
从祖父母元素中获取大孩子文字
这是你的问题标题。它与你写的略有不同。如果您想查看来自content-style
的任何曾孙section
,请执行以下操作:
//section[1]/*/content-style[normalize-space(text()) = 'ORDER']
最后注意事项:您将原始问题标记为xslt,在XSLT中,if条件不需要是布尔值,因此:
<xsl:if test="//section[1]/*/content-style[normalize-space(text()) = 'ORDER']">
<hello>found it!</hello>
</xsl:if>
等于将整个事物包裹在contains
中,除了使用contains
,你将检查所有元素组合的字符串,这也是mach 'no such ORDER'< / em>,例如。
以上也类似于:
<!-- in place of xsl;if -->
<xsl:apply-templates select="//section[1]/*/content-style" />
<!-- place this at root level anywhere -->
<xsl:template match="content-style[normalize-space(text()) = 'ORDER']">
<hello>found it!</hello>
</xsl:template>
<xsl:template match="content-style">
<hello>Not an order!</hello>
</xsl:template>
答案 1 :(得分:1)
你想要
exists(//section[1]/title/content-style[contains(., 'ORDER')])
答案 2 :(得分:1)
我想在此检查
title
中是否包含ORDER
字。我已经尝试了
contains(//section[1]/title[1]/content-style[1]/text(),'ORDER')
但是有些情况下
ORDER might be in 2nd
内容样式`或某些内容可能位于第3位。请让我知道找到它的一般方法。
这是一个XPath 1.0表达式,它产生了所需的布尔值:
boolean((//section)[1]/title[1][content-style[contains(., 'ORDER')]])
当至少有一个true()
元素是content-style
元素的子元素时,这恰好产生title
,该元素是第一个section
元素的第一个子元素XML文档。
以及相应的XPath 2.0表达式:
exists((//section)[1]/title[1][content-style[contains(., 'ORDER')]])
答案 3 :(得分:0)
我认为您需要从&#34;标题&#34;下面获取所有文字。节点。以下应该有效:
contains(//section[1]/title[1]/string(.),'ORDER')
至少根据this reference