当前位置: 首页 > 知识库问答 >
问题:

如果元素的单个实例包含特定文本,则返回Null

宿鹏程
2023-03-14

在XML文档中,例如:

<a>
  <b>
    <c>Text1</c>
    ...
  </b>
  <b>
    <c>Text2</c>
    ...
  </b>
  ...
</a>

如果任何元素包含'Text1'的内部文本,则返回Null集的单个XPath 1.0兼容、local-namespace()兼容的表达式是什么?

我尝试了许多不同的表达式,但无法获得返回空集的元素。

例如。

//*[local-name()='c' and .='Text1']

- or -   

/*[local-name()='a']/*[local-name()='b']/*not(local-name()='c' and .='Text1'])

严格的要求是由于一个具体的实施。NET函数调用XmlNode.选择单节点方法(字符串)

Dimitre提供的最终精确解

/*[not(//*[local-name()='c' and . = 'Text1'])]

共有2个答案

房时铭
2023-03-14

只是否定你的表达

not(//*[local-name()='c' and .='Text1'])

如果没有

闾丘鸣
2023-03-14

如果任何元素包含'Text1'的内部文本,则返回Null集的单个XPath 1.0兼容、local-namespace()兼容的表达式是什么?

如果没有这样的c元素,您还没有指定应该选择什么,所以下面我选择了顶部元素。

使用:

/*[not(//c[. = 'Text1'])]

如果XML文档中有一个c元素,其字符串值为“Text1”,那么这将不选择任何内容。

在使用默认名称空间的情况下,这将写为:

/*[not(//*[name()='c' and . = 'Text1'])]

基于XSLT的验证:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/">
     <xsl:copy-of select="/*[not(//c[. = 'Text1'])]"/>
 </xsl:template>
</xsl:stylesheet>

在提供的XML文档上应用此转换时:

<a>
  <b>
    <c>Text1</c>
    ...
  </b>
  <b>
    <c>Text2</c>
    ...
  </b>
  ...
</a>

对XPath表达式求值,并将求值结果复制到输出中——在本例中,不会产生任何结果——正如预期的那样。

如果我们将上述XML文档更改为:

<a>
  <b>
    <c>Text3</c>
    ...
  </b>
  <b>
    <c>Text2</c>
    ...
  </b>
  ...
</a>

然后,条件是true(),计算结果是以顶部元素为根的子树:

<a>
    <b>
        <c>Text3</c>
    ...
    </b>
    <b>
        <c>Text2</c>
    ...
    </b>
  ...
</a>
 类似资料:
  • 我试图找到正确的xpath表达式来选择包含特定文本的元素的父元素。 在下面的示例中,我希望选择文本匹配为“4”或任何其他数字的“span”元素,并且父元素与文本“Rooms”匹配: 我的XPath示例-匹配“div”元素中的每个“span” 源代码 我想要的是选择包含数字4的“span”元素作为文本,但html可能会更改,可能只有两个或一个“span”元素,如下例所示: 或

  • 我需要VBA代码,可以删除整个行,如果两个单元格(可以在工作表的任何列)包含一个特定的文本。 我有一个每日生成的打印报告文件,该文件中的文本(在一个非特定列中)和也在任何列中。 #代表一个数字,所以在我的文件中可以有0-99999…,这取决于打印了多少页。 该文件包含从到的列和数千行,和文本可以位于每列上,具体取决于打印作业。 我希望VBA查看整个工作表,如果一行包含和,则应该删除整行。

  • 我当前正在过滤一个流,但是如果过滤器没有返回任何匹配项,我想返回一个默认值。这是在附加流的链中,所以我使用它来避免在一个步骤没有任何结果时链停止。 目前,我正在通过将筛选结果收集到一个列表中来伪造它,如果列表为空,请创建新的默认列表并将其作为流返回。如果列表不为空,则将结果转换回流以将其传递回。 有什么更流的方式来实现这一点,而不需要去列表和返回流?

  • 有没有人知道一个vba代码,如果a列中的任何单元格包含单词“total”,就可以删除整行?例如,A38包含“total”,则删除整行。下个月,单元格A44包含单词“total”,删除整行。诸如此类....谢谢!

  • 问题内容: 我想返回数组的奇数,但是Eclipse似乎不接受我的返回码。我认为这需要返回整个数组,因为我将数组设置为方法的参数。如前所述,我需要传递一个数组并获取该数组的特定元素作为回报。即使我将该数组设为静态,如何返回单个元素? 编辑:好吧,这里是: 我知道这里可能存在多个错误,但我正在努力,不仅要返回奇数,还要将它们加在一起。 问题答案: 您的代码应如下所示: 这里的要点是方法返回类型,它应该

  • 将从非null元素返回最小值。 我想编写一个查询,将NULL视为可能的最小值。 我见过使用特殊值的日期技巧,如下所示:https://stackoverflow.com/a/32240382/7810882 但是,如果列的类型是并且没有可以映射到的特殊值怎么办?