xpath 相关问题

XPath的主要目的是解决XML文档的各个部分。它还提供操纵弦乐,数字和布尔值的基本设施。 XPath使用紧凑的非XML语法。 XPath在XML文档的抽象逻辑结构上运行,而不是表面语法。

如何在Selenium python中定位按钮角色元素超链接?

我正在尝试单击一个 id 每次都会更改的按钮。同一页面还有一个包含相同文本的按钮,但样式和类名称不同。 还有多个按钮...

回答 1 投票 0

python lxml xpath 查询在硬编码的 url 上失败,但适用于字节字符串

我正在尝试从文本标签中提取 xml 属性 parsable-cite 。我正在从 url“https://www.congress.gov/118/bills/hr61/BILLS-118hr61ih.xml”解析 xml。 我正在使用的代码...

回答 1 投票 0

如何使用 Playwright + dotnet 7 在页面之间切换

我在尝试使用 Playwright 和 dotnet7 运行自动化脚本时遇到更改窗口的问题。 如何执行点击新页面上的元素? 等待 ClickElement(定位器) 我的鳕鱼...

回答 1 投票 0

如何提取标签内的所有直接文本

我正在尝试提取 td 标记内的所有直接文本,但我只能使用此代码获取文本的第一部分。 td_tag = driver.find_element(By.ID, "td_id") driver.execute_script('

回答 1 投票 0

div标签滚动条的查询

在Robot Framework中编写自动化脚本时,我遇到了div标签滚动条的问题,导致数据提取失败。下面是一个 HTML 示例: ... 在Robot Framework中编写自动化脚本时,我遇到了div标签滚动条的问题,导致数据提取失败。下面是一个 HTML 示例: <div id="box"> <div class="rapper"> 我想咨询如何指定div标签的滚动运动。 谢谢你。 以下方法均不成功: Execute Javascript document.getElementByClassName('rapper').scrollTop Execute Javascript window.document.getElementByClassName('rapper').scrollTop 以下是使用 JavaScript 滚动具有特定类的 div 元素的正确方法: Execute Javascript document.querySelector('.rapper').scrollTop = 100 假设您要将滚动位置设置为 100 像素。根据需要调整值。

回答 1 投票 0

如何提取字符串的一部分并使用 Appium 检查器单击它

我正在开发一个Android应用程序。我的应用程序有一个文本“仅供参考。要查看完整列表,请单击此处”。 我需要一些如何单击文本:“单击此处”,以便我可以...

回答 1 投票 0

如何使用 xpath 在样式表 3.0 中的 xslt 中声明和使用动态数组 https://www.w3.org/TR/xpath-functions-31/#func-array-put

我有一个功能如下 ' ` 我有一个功能如下 ' `<xsl:function name="type:iterateICinDef"> <xsl:param name="pElem" as="element()"/> <xsl:param name="parentSpc"/> <xsl:param name="sequence" as="xs:integer"/> <xsl:param name="cardinality"/> <xsl:param name="required"/> <xsl:param name="refNameSpc"/> <xsl:param name="type"/> <xsl:param name="flag" as="xs:integer"/> <xsl:param name="hierParent"/> <xsl:variable name="refName" select="replace($refNameSpc,'_spc',' ')"/> <xsl:variable name="parent" select="replace($parentSpc,'_spc',' ')"/> <xsl:if test="not ($pElem/_u0024ref or $pElem/items/_u0024ref)"> <Repository_spcIC> <xsl:attribute name="Name"> <xsl:value-of select="$refName"></xsl:value-of> </xsl:attribute> </Repository_spcIC> </xsl:if> </xsl:function>` 在上面的“名称应该是唯一的,并且不应该与另一个Repository_spcIC重复,因此我想通过形成一个名称数组并在数组中查找该名称是否已经存在来避免重复,如果它确实存在,那么我需要在名称中添加后缀“__D1”以确保名称唯一。如果同名重复两次以上,则序列号将递增以使其唯一,如“__D2”、“__D3”等.如果名称是唯一的,那么我需要将该名称添加到数组中,以便下次调用该函数时将查找该数组以了解该名称是否已存在,从而决定是否为该名称添加后缀 上面的函数是从另一个函数调用的,如下所示 `<xsl:for-each select="/*/definitions/element()"> <!-- what this loop does is goes one level up, which is definitions and then iterate thru all nodes under it i.e each object to match def1 or def2 got earlier--> <xsl:if test="name(.)=$def1 or name(.)=$def2"> <xsl:variable name="cardinality"> <xsl:if test="required"> <xsl:for-each select="required"> <countNo> <xsl:if test="(position() &gt; 1)"> <xsl:text>,</xsl:text> </xsl:if> </countNo> <xsl:value-of select="text()"/> </xsl:for-each> </xsl:if> </xsl:variable> <xsl:sequence select="type:iterateICinDef((.),if($flag=1) then $refName else if($pElem/comments) then $pElem/comments /text() else $pElem/name(.),$sequence + 1, if($type='array') then 'Zero or More' else 'Zero or One',$cardinality,$referredName, $type,1,$refName)"/> </xsl:if> </xsl:for-each>` 数组与 XDM 数据模型中的其他所有内容一样,是不可变的。这意味着您永远无法“原位”更改现有数组,只能通过更改现有数组来创建新数组。 您已经用过程伪代码表达了您的需求,而 XSLT 不是一种过程语言,因此很难对您的代码进行逆向工程以找出真正的需求是什么。通过描述流程的输入和输出来解释您的需求要好得多,而不是作为从一个到另一个的一系列操作。 您问题中的“一次一个”这句话敲响了警钟。在像 XSLT 这样的声明性函数式语言中,没有时间概念,也没有事情相继发生的概念。 也不清楚这里是否需要 XDM 阵列。我怀疑 XDM 序列会更容易使用。数组是该语言的 3.0 附加组件(主要是为了支持 JSON),而序列自 2.0 以来就已经存在,并且更深入地集成到处理模型中。例如,XSLT 的 xsl:for-each 指令可用于处理序列中的每个单独项目,但没有等效的指令来处理数组的每个成员。 我可以解释设置空序列或数组或包含字符串集合的序列或数组的详细语法,但我完全不确定这会有帮助。如果您能用功能术语解释您的需求(输入是什么、输出是什么以及它们如何关联?),那就更好了,而且这可能会更容易转换为 XSLT 代码。 ==更新== 在对问题的更新中,您已经解释过您想要编写一个生成唯一值的函数。为了实现这一点,您建议该函数具有先前调用的内存,以便它可以避免两次生成相同的值。因此,该函数需要修改一些外部内容(具体来说,它对先前调用的记忆):它是一个具有副作用的函数,通常称为“不纯函数”,在纯函数式编程语言中,强烈建议不要这样做,或者这是不可能的。 此问题有多种解决方法,其中最常见的可能是: 生成一个值,该值是您当前在输入中处理的内容的函数,例如使用 position() 或 generate-id() 或 xsl:number。 生成一个有效随机且重复概率极低的值(例如,基于当前时间戳的值)。这就是 UUID 通常的工作原理;对于大多数实际目的来说,每百万年才可能出现一次的值是足够独特的。 编写一个提供生成器的函数,其中生成器有两个属性:您这次可以使用的值,以及您可以调用以获取更多值的新生成器。这就是内置函数 fn:random-number-generator() 的工作原理。这是函数式编程爱好者会这样做的方式,但如果您是函数式编程的新手,则需要一些时间来适应。 如果您需要如您所描述的唯一名称,您可以重新计算上一步中的名称。代码显示了如何实现这一点: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" indent="yes"/> <xsl:variable name="data"> <data> <item name="A"/> <item name="A"/> <item name="B"/> <item name="A"/> <item name="C"/> <item name="C1"/> <item name="C1"/> <item name="C11"/> <item name="C1"/> <item name="C11"/> <item name="C12"/> <item name="D"/> <item name="A"/> </data> </xsl:variable> <xsl:template name="makeunique"> <xsl:param name="data"/> <xsl:if test="not($data/data/item[@replaced = 'true']) and $data/data/item/@replaced"> <data> <xsl:for-each select="$data/data/item"> <item name="{@name}" origname="{@origname}"/> </xsl:for-each> </data> </xsl:if> <xsl:if test="$data/data/item[@replaced = 'true'] or not($data/data/item/@replaced)"> <xsl:variable name="newData"> <data> <xsl:for-each select="$data/data/item"> <xsl:variable name="name"> <xsl:if test="./preceding-sibling::item[@name = current()/@name]"> <xsl:value-of select="concat(current()/@name,./preceding-sibling::item[@name = current()/@name]/last()+1)"/> </xsl:if> <xsl:if test="not(./preceding-sibling::item[@name = current()/@name]) and not(./following-sibling::item[@name = current()/@name])"> <xsl:value-of select="@name"/> </xsl:if> <xsl:if test="not(./preceding-sibling::item[@name = current()/@name]) and (./following-sibling::item[@name = current()/@name])"> <xsl:value-of select="concat(current()/@name,'1')"/> </xsl:if> </xsl:variable> <xsl:variable name="origname"> <xsl:if test="not(current()/@origname)"> <xsl:value-of select="current()/@name"/> </xsl:if> <xsl:if test="current()/@origname"> <xsl:value-of select="current()/@origname"/> </xsl:if> </xsl:variable> <item name="{$name}" origname="{$origname}" replaced="{not($name = current()/@name)}"/> </xsl:for-each> </data> </xsl:variable> <xsl:call-template name ="makeunique"> <xsl:with-param name="data" select="$newData"/> </xsl:call-template> </xsl:if> </xsl:template> <xsl:template name="test"> <xsl:call-template name ="makeunique"> <xsl:with-param name="data" select="$data"/> </xsl:call-template> </xsl:template> </xsl:stylesheet> 输出: <?xml version="1.0" encoding="UTF-8"?> <data> <item name="A1" origname="A"/> <item name="A2" origname="A"/> <item name="B" origname="B"/> <item name="A3" origname="A"/> <item name="C" origname="C"/> <item name="C11" origname="C1"/> <item name="C121" origname="C1"/> <item name="C111" origname="C11"/> <item name="C13" origname="C1"/> <item name="C112" origname="C11"/> <item name="C122" origname="C12"/> <item name="D" origname="D"/> <item name="A4" origname="A"/> </data> 顺便说一句:这个解决方案更适合 XSLT 爱好者。我更喜欢在这里使用有副作用的函数。

回答 2 投票 0

如何从 xml <Any> 元素中获取值?

在我的 Biztalk Orchestration 设计器(表达式编辑器)中,我需要从名为 的元素中提取值。我创建了一个字符串变量,并在字段上执行了 xpath,但变量

回答 1 投票 0

Python-Selenium-Xpath - Web 表 - 获取 Span 标记文本

这对我来说是一个艰难的问题,在发布问题之前我已经阅读了所有早期的帖子。 HTML网络表格结构如下,我想要span标签中的日期部分,下面是我的所有代码...

回答 2 投票 0

如何正确连接XPath?

我尝试通过串联来匹配多个元素及其所有出现的情况。 我尝试了两种表达方式 concat(//h5,'###',//h5/following-sibling::p) concat(//*/h5,'###',//*/h5/following-sibling::p...

回答 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 选择父级

我有以下 XML: ... 我有以下 XML: <A> <Lot> <Of> <Various> <Parents> <Object NodeType="UsageType"> <Property Name="Descriptor" Value="A" Type="My.DescriptorType"/> [...] </Object> <Object NodeType="UsageType"> <Property Name="Descriptor" Value="B" Type="My.DescriptorType"/> [...] </Object> <Object NodeType="UsageType"> <Property Name="Descriptor" Value="C" Type="My.DescriptorType"/> [...] </Object> </Parents> </Various> </Of> </Lot> </A> 我正在尝试选择具有子元素的对象元素,其中包含 <Property Name="Descriptor" Value="B" Type="My.DescriptorType"/>。 我真的不知道如何进行此选择,因为这依赖于很多属性: 该元素应该是一个“对象”,其属性为“NodeType”,值为“UsageType” Property 类型的一个子元素,具有值为“Descriptor”的 Name 属性和值为“B”的 Value 属性。 我已经尝试过以下方法: //Object[@NodeType='UsageType' and Property@Name='Descriptor' and Property@Value='B'] 但是它不起作用(而且我认为它不能确保它是具有这两个属性的相同“属性”。 知道如何实现吗? //Object[@NodeType='UsageType' and Property[@Name='Descriptor' and @Value='B']]

回答 1 投票 0

Playwright 相当于 JavaScript 的“最接近”函数

Playwright 缺少与 JavaScript 的 close() 函数等效的函数。 有没有灵活的方法使用 XPath 来做到这一点?

回答 1 投票 0

CSS 选择器如何获取特定元素的索引

我正在尝试使用CSS选择器来选择和项目,但仅适用于xpath。这个 xpath 到 css 的等价物是什么。 driver.findElement(By.xpath("(//img[@alt='授权该行'])[2]...

回答 1 投票 0

如何匹配包含Xpath的祖先或自我?

我尝试匹配包含特定文本字符串的任何元素的祖先或自身: 在第 1 步中,包含文本的元素匹配有效: //*[contains(text(),"ABC")]。 但我与...

回答 1 投票 0

WebDriverIO + VSC + JavaScript - 带有 //* 的 Xpath 被视为注释

我正在VSC中使用WebDriverIO开发UI框架。现在一切正常,但是当我使用如下所示的 XPath 时,//* 之后的所有内容都被视为注释。我该如何纠正这个问题? 常量...

回答 2 投票 0

使用 Xpath 从属性值获取元素名称

我正在尝试获取具有特定属性值的每个节点的元素/标签名称。 我有一个 xml: 这个 是 A&l...

回答 1 投票 0

XPath 用于查找没有 id 或类的元素

如何获取所有没有id属性的tr元素? ... ... ... 谢谢

回答 4 投票 0

如何获取XML中的所有节点?

我想获取 XML 的全部 。 我已经尝试过这样的: while ($reader->localName === 'item') { // 展开为 DOM $item = $reader->expand($do...

回答 1 投票 0

PostgreSQL:通过两个键使用 xpath 进行搜索

我有一个包含以下 XML 字段的表: 6512779208625374885 2018-02-05T14:30:06+00:00 我有一个包含以下 XML 字段的表: <assignments> <assignment> <project_id>6512779208625374885</project_id> <start_date>2018-02-05T14:30:06+00:00</start_date> <state_id>1</state_id> </assignment> <assignment> <project_id>7512979208625374996</project_id> <start_date>2017-12-01T15:30:00+00:00</start_date> <state_id>0</state_id> </assignment> <assignment> <project_id>5522979707625370402</project_id> <start_date>2017-12-15T10:00:00+00:00</start_date> <state_id>1</state_id> </assignment> </assignments> 我可以通过特定的project_id搜索记录: WHERE xpath('/assignments/assignment/project_id/text()', t.assignments)::text[] @> array['6434489631431865709'] 但我无法找出如何同时搜索该项目的特定project_id和state_id。可以吗? 您并没有真正指定您要做什么,但您可以将这两个检查直接烘焙到 XPath 表达式中:demo select * from test t where (xpath('/assignments/assignment/project_id/text()=''7512979208625374996'' and '|| '/assignments/assignment/state_id/text()=''0'' ', t.assignments)::text[]::bool[])[1] 您还可以使用 xmltable()“解压”xml 并将其处理为表格: SELECT * from test t, xmltable('//assignments/assignment' passing t.assignments columns project_id text, state_id smallint ) where project_id='7512979208625374996' and state_id=0; 在 xml2 中,这些可以通过 xpath_bool(): 来完成 select * from test t where xpath_bool(t.assignments::text, '/assignments/assignment/project_id/text()=''7512979208625374996'' and '|| '/assignments/assignment/state_id/text()=''0'' '); 和xpath_table(): SELECT * from xpath_table('id', 'assignments', 'test', '/assignments/assignment/project_id|/assignments/assignment/state_id', 'true'--'project_id = ''6512779208625374885'' ' ) AS t(id integer, project_id text, state_id smallint) where project_id='7512979208625374996' and state_id=0; 键列 (id) 可让您将其连接回您的表格。

回答 1 投票 0

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