xpath-2.0 相关问题

将此标记用于特定于XML Path Language(XPath)2.0版的问题

我想在Python Selenium WebDriver中只提取li的内容而不提取span的内容

所以这是示例 html 文档: 列出内容 跨越文本... 这是示例 html 文档: <div id="div1"> <ul class="lists"> <li class="listItem1"> List content <span class="span1">span text</span> </li> </ul> </div> 我只想提取“列表内容” 如果我这样做: elementList = driver.find_element(By.XPATH, "/div/ul/li") elementList.text 我明白:List content span text 如果我这样做: elementList = driver.find_element(By.XPATH, "/div/ul/li[1]") 我还是明白List content span text 我该怎么做才能得到 没有跨度文本的“列出内容” elementList = driver.find_element(By.XPATH, "//li[@class='listItem1']").text span_text = driver.find_element(By.XPATH, "//span[@class='span1']").text elementList = elementList.replace(span_text, "") 这可能有点啰嗦,但我认为它应该可以解决问题。 尝试 text() 选项,它将返回 li 标签中存在的文本 elementList = driver.find_element(By.XPATH, "//div/ul/li/text()") 或 elementList = driver.find_element(By.XPATH, "normalize-space(//div/ul/li/text())")

回答 2 投票 0

Python 中支持 XPath 2.0 的库

是否可以在Python中使用XPath 2.0函数,例如starts-with()、ends-with()和contains()?我试图使用 lxml 和 defusedxml,但不幸的是它们不支持任何这些功能......

回答 3 投票 0

选择以前的堂兄弟姐妹(包括兄弟姐妹)

我经常遇到想要选择前一个“表兄弟”到节点的问题。 例如 我经常遇到想要选择前一个“表兄弟”到节点的问题。 例如 <root> <level1> <level2 id="1"/> <level2 id="2"/> <level2 id="3"/> <level2 id="4"/> </level1> <level1> <level2 id="5"> <level2 id="9"/> </level2> <level2 id="6"/> <level2 id="7"/> <level2 id="8"/> </level1> </root> 如果上下文节点是 /root/level1/level2[@id='6'] 我不想要“id=9”,我想要“id=5” 如果上下文节点是,则类似 /root/level1/level2[@id='5'] 我想要“id=4” 所以....preceding-sibling 在前一种情况下不起作用,但在后者中不起作用。 前面,选择后一种情况,但不选择前一种情况。 (可能还有很多其他情况) 所以我当前的解决方案是这样的(使用 id=6 作为上下文节点...我可以将它放在一个函数中,但这应该足够清楚) (/root/level1/level2[@id='6']/preceding::level2 intersect /root/level1/level2)[last()] 这确实有效,但似乎..复杂,而且可能效率低下...我是否缺少一个更简单的解决方案? (我目前在 XSLT 3 中使用 XPath 3.1,但我认为这是一个普遍问题) (我已将其限制为 XPath 2.0+,但我可能会将问题开放给 XPath 1.0,因为这看起来更糟糕,因为 intersect 不存在......但我将在另一篇文章中这样做) 对于 XSLT 1.0 这有效 /root/level1/level2[@id='6']/preceding::level2[parent::level1[parent::root]][1] 这无疑是一个更好的解决方案 我想做的是 /root/level1/level2[@id='6']/preceding::(root/level/level2)[1] 并且被解释为路径“root/level/level2”上的匹配 但我认为这无效? 我想不出一个简单的表达方式,我想知道下面使用 path 和 xsl:evaluate 的代码是否实现了要求: <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="#all" xmlns:mf="http://example.com/mf" expand-text="yes"> <xsl:function name="mf:cousins" as="node()*"> <xsl:param name="node" as="node()"/> <xsl:variable name="path" select="path($node)"/> <xsl:variable name="path-without-predicates" select="replace($path, '\[[0-9]+\]', '')"/> <xsl:variable name="cousins" as="node()*"> <xsl:evaluate context-item="$node" xpath="$path-without-predicates"/> </xsl:variable> <xsl:sequence select="$cousins except $node"/> </xsl:function> <xsl:function name="mf:preceding-cousins" as="node()*"> <xsl:param name="node" as="node()"/> <xsl:sequence select="mf:cousins($node)[. &lt;&lt; $node]"/> </xsl:function> <xsl:template match="level2[@id = 6] | level2[@id = 5]"> <xsl:comment>preceding cousin: {mf:preceding-cousins(.)[last()]=>serialize(map{ 'method' : 'xml' })}</xsl:comment> <xsl:next-match/> </xsl:template> <xsl:output method="xml" indent="no"/> <xsl:mode on-no-match="shallow-copy"/> </xsl:stylesheet> 使用 path 函数,然后进行字符串替换和 xsl:evaluate 看起来有点像“黑客”,但我没有看到简单、直接的 XPath。

回答 1 投票 0

minGW 需要 XPath 2.0 c++

我正在寻找 XPath 2.0 c++ minGW 的库。 libXML2 仅支持 1.1。 Saxon 不在 minGW 下运行。

回答 1 投票 0

如何获取 saxonc XPath 匹配的行号?

我正在构建一个报告,该报告将显示与一组 XPath 匹配的 XML 元素的行号。我需要支持 XPath 2.0。将 XML 发送到用 Java 或 C 编写的单独的基于 Web 的处理器...

回答 1 投票 0

从格式日期获取年份、周数、周日数,但我的周从星期六开始

这是一种常见的 ISO 问题,我知道这可能是一场噩梦。 Xpath 有一个有用的函数 格式日期 其中有令人难以置信的参数,我将从中计算出来 https://www.w3.or...

回答 1 投票 0

XSLT:从交叉引用中提取值

我正在尝试从与交叉引用 id 匹配的 aff 元素中提取值,但不确定使用什么 XPath 来获取特定的匹配值。 XML: 我正在尝试从与交叉引用 id 匹配的 aff 元素中提取值,但不确定使用什么 XPath 来获取特定的匹配值。 XML: <article> <contrib-group> <contrib contrib-type="author"> <name><surname>Doe</surname><given-names>Jane</given-names></name><email>email here</email><xref ref-type="aff" rid="affa">a</xref><xref ref-type="corresp" rid="cor2">*</xref> </contrib> <contrib contrib-type="author"> <name><surname>Done</surname><given-names>John</given-names></name><email>email here</email><xref ref-type="aff" rid="affb">b</xref> </contrib> <aff id="affa"><label>a</label>Department of Philosophy, <institution>University of XXX</institution>, <country>Germany</country></aff> <aff id="affb"><label>b</label>Institute of Logic, <institution>Univeristy of YYY</institution>, Virginia, <country>United States</country></aff> </contrib-group> </article> XSLT: <xsl:template match="*"> <article> <xsl:apply-templates select="//contrib-group/contrib"/> </article> </xsl:template> <xsl:template match="article/contrib-group/contrib"> <contrib> <surname><xsl:value-of select="name/surname"/></surname> <given-names><xsl:value-of select="name/given-names"/></given-names> <email><xsl:value-of select="./email"/></email> <affiliation> <xsl:if test="xref/@rid = following-sibling::aff/@id"> <xsl:value-of select="following-sibling::aff"/> </xsl:if> </affiliation> </contrib> </xsl:template> 我知道这里的<xsl:value-of>不正确 - 如何选择与@rid匹配的相应链接@id? 输出为我提供了两个贡献的隶属关系: <article> <contrib> <surname>Doe</surname> <given-names>Jane</given-names> <email>email here</email> <affiliation>aDepartment of Philosophy, University of XXX, Germany bInstitute of Logic, Ohio, United States</affiliation> </contrib> <contrib> <surname>Done</surname> <given-names>John</given-names> <email>Email here</email> <affiliation>aDepartment of Philosophy, University of XXX, Germany bInstitute of Logic, Ohio, United States</affiliation> </contrib> </article> XSLT 有一个内置的 key 机制来解决交叉引用。 XSLT 2.0 <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:key name="aff" match="aff" use="@id" /> <xsl:template match="/article"> <xsl:copy> <xsl:apply-templates select="contrib-group/contrib"/> </xsl:copy> </xsl:template> <xsl:template match="contrib"> <xsl:copy> <xsl:copy-of select="name/* | email"/> <affiliation> <xsl:value-of select="key('aff', xref[@ref-type='aff']/@rid)/(node() except label)" separator=""/> </affiliation> </xsl:copy> </xsl:template> </xsl:stylesheet> 应用于您的输入示例,这将返回: 结果 <?xml version="1.0" encoding="UTF-8"?> <article> <contrib> <surname>Doe</surname> <given-names>Jane</given-names> <email>email here</email> <affiliation>Department of Philosophy, University of XXX, Germany</affiliation> </contrib> <contrib> <surname>Done</surname> <given-names>John</given-names> <email>email here</email> <affiliation>Institute of Logic, Univeristy of YYY, Virginia, United States</affiliation> </contrib> </article>

回答 1 投票 0

如果子元素包含文本,XPath 查找元素

假设我有以下元素 1 2 假设我有以下要素 <div class="someDiv"> <p class="someP">1</p> <span class="someP">2</span> <h1 class="someP">3</h1> </div> <div class="someDiv"> <p class="someP">4</p> <span class="someP">5</span> <h1 class="someP">6</h1> </div> 我想找到包含文本“1”或“3”(这意味着第一个div)的子元素的div。我可以搜索任何文本(其中元素未知,因此需要动态 - 我使用 span、h1 和 p 标签作为示例,但它们可以是其他标签)。 尝试使用祖先和兄弟,但找不到找到父 div 元素的方法 //div[//*[contains(text(), "1") or contains(text(), "3")]]

回答 1 投票 0

Xpath 里面的 Xpath

我正在尝试为以下场景创建一个xpath,你能帮忙吗? 如何找出@parent为/A/B/@id的C的值,即PQR,C可能不是紧邻的下一个节点。我想要...

回答 1 投票 0

使用XPath选择没有指定中间节点的后代节点

使用 XPath 2.0(理想情况)或 3.0(可选),我想选择作为 A 的后代的节点 C,只要从 A 到 C 的路径不包含任何 B 节点。 &l...

回答 2 投票 0

xpath 中可以有条件字符串连接或连接吗?

我正在尝试执行条件字符串连接,并想知道是否有比使用 if 语句更好的方法。 xml 看起来类似于 数学...

回答 1 投票 0

如何通过Xpath获取文本属性中只有数字的节点?

我有这样的 DOM: abc 定义 13456 gh564 我想获取仅包含数字的元素。 我可以通过得到...

回答 1 投票 0

xsl 如何将 XML 文档作为变量应用到模板

我有这个基本模板,可以对 XML 文档中的某些节点进行排序和删除。当将 XML 文件作为 Saxon 命令的输入参数传递时,它在独立 XSLT 中按预期工作...

回答 1 投票 0

如何定位具有相同类名和文本的元素,如下所示

我需要单击列表中的元素,但无法单击我正在使用的元素(//[@class="pb-dropdown__contents pb-dropdown__contents--no-margin pb-dropdown__con ...

回答 1 投票 0

Xpath 有没有一种更简洁的方法来过滤多个“包含”条件?

并且(包含(BusinessType,'餐厅')或包含(BusinessType,'Pub')或包含(BusinessType,'外卖')) 上述内容按预期返回包含指定...的案例

回答 1 投票 0

在 xpath 中我想验证父节点是否与条件相同时如何实现?

“名称”:“a”, “类型”:“容器”, “孩子们”: [{ “名称”:“a1”, "type": "容器&q...

回答 1 投票 0

如何缩短具有多个值的相同属性但使用 contains 函数的多语言支持的 xpath?

早些时候,我的某个图像元素的 xpath 是用包含英文单词的文本编写的。 现在,在白话支持下,它已经延长了。 寻求帮助以缩短它。 支持英语的 XPath: ...

回答 1 投票 0

根据其键之一的值获取 Xml List 对象

嗨,我目前正在查看 xml 数据, ABC 定义 <...

回答 1 投票 0

XPath 从 XML 获取元素值

我有以下 XML 我有以下 XML <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:partner.soap.sforce.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sf="urn:sobject.partner.soap.sforce.com"> <soapenv:Header> <LimitInfoHeader> <limitInfo> <current>142795</current> <limit>49754000</limit> <type>API REQUESTS</type> </limitInfo> </LimitInfoHeader> </soapenv:Header> <soapenv:Body> <queryAllResponse> <result xsi:type="QueryResult"> <done>true</done> <queryLocator xsi:nil="true"/> <records xsi:type="sf:sObject"> <sf:type>User</sf:type> <sf:Id>005030000040AQeAAM</sf:Id> <sf:Id>005030000040AQeAAM</sf:Id> </records> <size>1</size> </result> </queryAllResponse> </soapenv:Body> </soapenv:Envelope> 我想获取<sf:Id>005030000040AQeAAM</sf:Id>和<size>1</size>的值。请在这里帮忙。 您可以使用这个 2.0 XPath... //queryAllResponse/result/(size|records/*:Id[1])

回答 1 投票 0

如何通过 xpath 填充输入值 onclick

我想用点击功能填充输入值,就像这样 函数 inputfillclick() { document.getElementById('inputidx').value="KuchBhi" } 我想用点击功能填充输入值,像这样 <script> function inputfillclick() { document.getElementById('inputidx').value="KuchBhi" } </script> <input type="text" id="inputidx" name="inputidx" /> <button class="button" onclick="inputfillclick()">Fill Now</button> 但问题是我想在输入字段没有 id 的其他页面上执行此操作,我想通过 xpath 执行此操作,有什么办法吗? <input maxlength="140" step="" enterkeyhint="done" autocomplete="off" type="password" class="uni-input-input"> xpath 是 //input[@type='password'] 完整的 xpath /html/body/uni-app/uni-page/uni-page-wrapper/uni-page-body/uni-view/uni-view/uni-view[3]/uni-view[2]/uni-view[2]/uni-input/div/input 您可以使用 document.evaluate() 方法使用其 XPath 表达式选择输入元素,然后使用 value 属性设置其值。 function inputfillclick() { var xpath = "//input[@type='password']"; var inputElement = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if (inputElement) { inputElement.value = "KuchBhi"; } else { console.log("Input element not found."); } } 在此代码中,document.evaluate() 方法使用给定的 XPath 表达式选择第一个具有 type 属性设置为 'password' 的输入元素。如果找到这样的元素,其值属性将设置为 'KuchBhi'。如果没有找到输入元素,代码会向控制台记录一条消息。 您可以在要填写输入字段的页面上使用按钮或任何其他事件处理程序调用inputfillclick()函数。

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.