Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XPath:如何在父元素中选择text()或span元素_Xpath - Fatal编程技术网

XPath:如何在父元素中选择text()或span元素

XPath:如何在父元素中选择text()或span元素,xpath,Xpath,我有一个父元素字体,我想选择所有的子元素,这些子元素是文本元素或跨度元素的直接后代。如何构造这样的xpath?如果当前节点是字体元素,则类似以下内容: text()|span //a[text()='View Larger Map']/../../../../div[contains(@class, 'paragraph')][3]/font/node()[name()='span' or name()=''] 否则,您必须始终结合两个完整的XPath—一个用于文本,另一个用于跨度,例如:

我有一个父元素字体,我想选择所有的子元素,这些子元素是文本元素或跨度元素的直接后代。如何构造这样的xpath?

如果当前节点是字体元素,则类似以下内容:

text()|span
//a[text()='View Larger Map']/../../../../div[contains(@class, 'paragraph')][3]/font/node()[name()='span' or name()='']
否则,您必须始终结合两个完整的XPath—一个用于文本,另一个用于跨度,例如:

font/text()|font/span
如果当前节点刚好位于字体上方-或

如果使用一些复杂的选择条件从根开始

如果您有类似于最后一个路径的复杂路径,那么最好将部分路径存储在变量中—例如,在XSLT中:

<xsl:variable name="font" select="//a[text()='View Larger Map']/../../../../div[contains(@class, 'paragraph')][3]/font"/>

. . . 

<xsl:for-each select="$font/span|$font/text()">
  . . . 
</xsl:for-each>

这是因为name为文本节点返回一个空字符串,但我不能100%确定它是否适用于所有XPath处理器,并且它可能会错误地匹配注释节点。

如果当前节点是font元素,则类似以下内容:

text()|span
//a[text()='View Larger Map']/../../../../div[contains(@class, 'paragraph')][3]/font/node()[name()='span' or name()='']
否则,您必须始终结合两个完整的XPath—一个用于文本,另一个用于跨度,例如:

font/text()|font/span
如果当前节点刚好位于字体上方-或

如果使用一些复杂的选择条件从根开始

如果您有类似于最后一个路径的复杂路径,那么最好将部分路径存储在变量中—例如,在XSLT中:

<xsl:variable name="font" select="//a[text()='View Larger Map']/../../../../div[contains(@class, 'paragraph')][3]/font"/>

. . . 

<xsl:for-each select="$font/span|$font/text()">
  . . . 
</xsl:for-each>

这是因为name为文本节点返回一个空字符串——但我不能100%确定它是否适用于所有XPath处理器,并且它可能会错误地匹配注释节点。

我是否需要一些参数或类似的内容,因为如果我尝试//[text='View large Map']/../../../../../../../div[contains@class,“段落”][3]/font/span | text,我得到了子span,但没有文本元素,如果我得到了/a[text='View large Map']/../../../../div[contains@class,“段落”][3]/font/text | span,我得到文本元素,但没有span。感谢您的澄清Comment节点也没有名称。因此,这个答案需要更正。文档节点根节点是另一种没有名称的节点类型,但在这种特定情况下,可以不考虑将其写入。@DimitreNovatchev:我写了“…它可能会错误地匹配注释节点”-只有在确定源中没有注释的情况下,才能使用第二种解决方案,第一个应该总是有效的。@MiMo:是的。我在评论中说,提供有问题的解决方案并指出其问题是不可接受的。更好的方法是修复这个有问题的解决方案并提供固定的解决方案,在这种情况下这是可能的。我是否需要一些参数或类似的东西,因为如果我尝试使用[text='View large Map']/../../../../../div[contains@class,'paragration'][3]/font/span | text,我得到子span,但没有文本元素,如果得到//a[text='View Large Map']/../../../../../div[contains@class,“第段][3]/font/text | span,我得到了文本元素,但没有span。感谢您的澄清Comment节点也没有名称。因此,这个答案需要更正。文档节点根节点是另一种类型的节点,没有名称,但在这种特定情况下可以安全地忽略。@DimitreNovatchev:我写了“…并且它是uld错误匹配注释节点”-第二种解决方案只能在您确定源代码中没有注释的情况下使用,第一种解决方案应始终有效。@MiMo:是的。我在评论中说,提供有问题的解决方案并指出其问题是不可接受的。更好的方法是修复此有问题的解决方案。@MiMo:是的。我在评论中说,提供有问题的解决方案并指出其问题是不可接受的n并提供固定的解决方案-在这种特殊情况下,这是可能的。