XPath:如何在父元素中选择text()或span元素
我有一个父元素字体,我想选择所有的子元素,这些子元素是文本元素或跨度元素的直接后代。如何构造这样的xpath?如果当前节点是字体元素,则类似以下内容: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—一个用于文本,另一个用于跨度,例如:
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并提供固定的解决方案-在这种特殊情况下,这是可能的。