xpath 相关问题

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

Xpath 1.0 Mysql 问题

我有这个示例 xml 100 1 ...

回答 1 投票 0

使用 XPATH 将值与包含该值的字符串进行匹配

我有这个 XML 文件: 100715 文件 我有这个 XML 文件: <Archive Lot="1"> <DOSSIER> <Identifiant>100715</Identifiant> <Personne> <LIBL>File</LIBL> </Personne> </DOSSIER> <DOSSIER> <Identifiant>3455667</Identifiant> <Personne> <LIBL>File2</LIBL> </Personne> </DOSSIER> </Archive> 我想将 中的节点 DOSSIER 与包含 Identifiant 值的字符串进行匹配。 通过以下请求,它可以工作: Archive/DOSSIER[contains(Identifiant, "100715")] 但就我而言,我想匹配一个不完全相同但包含节点值的字符串。这样做就不匹配了。 Archive/DOSSIER[contains(Identifiant, "100715_klingon_uiiu")] 我没有比赛。我该怎么办? 我需要将 XML 中的节点与值不完全相同的外部信息(文件名)进行匹配。但标识符就在那里。 谢谢你 似乎你可以交换你的 contains() 参数(因为你想检查第一个参数字符串是否包含第二个参数字符串)... /Archive/DOSSIER[contains("100715_klingon_uiiu", Identifiant)]

回答 1 投票 0


如何使用 selenium webdriver python 单击列表中没有 id 的跨度?

我无法通过 selenium Web 驱动程序单击“Span 1”。这是来自网络的检查元素: ... 我无法通过 selenium Web 驱动程序单击“Span 1”。这是来自网络的检查元素: <div class="m-menu__subnav siak_menu_lm01" data-cek="02"> <ul class="m-menu__content"> <li class="m-menu__item"> <h3 class="m-menu__heading m-menu__toggle"> <i class="m-menu__link-bullet m-menu__link-bullet--line m--visible-tablet-and-mobile-table-cell"> <span></span> </i> <span class="m-menu__link-text">AA</span> <i class="m-menu__ver-arrow la la-angle-right"></i> </h3> <ul class="m-menu__inner"> <li class="m-menu__item" m-menu-link-redirect="1" aria-haspopup="true"> <a href="dafduk/wni/dataKeluarga/searchList" class="m-menu__link ajaxify" data-cek="020101" data-target="siakContent" data-hidden="siakContentHandlebar" data-server="true" data-refresh="m_header_menu_default"> <i class="m-menu__link-bullet m-menu__link-bullet--dot m--visible-tablet-and-mobile-table-cell"> <span></span> </i> <span class="m-menu__link-text">Span 1</span> </a> </li> <li class="m-menu__item" m-menu-link-redirect="1" aria-haspopup="true"> <a href="dafduk/wni/biodataEktp/searchList" class="m-menu__link ajaxify" data-cek="020102" data-target="siakContent" data-hidden="siakContentHandlebar" data-server="true" data-refresh="m_header_menu_default"> <i class="m-menu__link-bullet m-menu__link-bullet--dot m--visible-tablet-and-mobile-table-cell"> <span></span> </i> <span class="m-menu__link-text">Span 2</span> </a> </li> </ul> </li> <li class="m-menu__item"> <h3 class="m-menu__heading m-menu__toggle"> <i class="m-menu__link-bullet m-menu__link-bullet--line m--visible-tablet-and-mobile-table-cell"> <span></span> </i> <span class="m-menu__link-text">BB</span> <i class="m-menu__ver-arrow la la-angle-right"></i> </h3> <ul class="m-menu__inner"> <li class="m-menu__item" m-menu-link-redirect="1" aria-haspopup="true"> <a href="dafduk/oa/dataKeluarga/searchList" class="m-menu__link ajaxify" data-cek="020201" data-target="siakContent" data-hidden="siakContentHandlebar" data-server="true" data-refresh="m_header_menu_default"> <i class="m-menu__link-bullet m-menu__link-bullet--dot m--visible-tablet-and-mobile-table-cell"> <span></span> </i> <span class="m-menu__link-text">Span 3</span> </a> </li> <li class="m-menu__item" m-menu-link-redirect="1" aria-haspopup="true"> <a href="dafduk/oa/biodataEktp/searchList" class="m-menu__link ajaxify" data-cek="020202" data-target="siakContent" data-hidden="siakContentHandlebar" data-server="true" data-refresh="m_header_menu_default"> <i class="m-menu__link-bullet m-menu__link-bullet--dot m--visible-tablet-and-mobile-table-cell"> <span></span> </i> <span class="m-menu__link-text">Span 4</span> </a> </li> </ul> </li> </ul> </div> 我尝试使用此代码: clickSpan = driver.find_element("xpath",'//span[text()="Span 1"]') clickSpan.click() 但这不起作用,我收到此错误: selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <span class="m-menu__link-text">...</span> is not clickable at point (713, 175). Other element would receive the click: <div class="blockUI blockOverlay" style="z-index: 99999; border: none; margin: 0px; padding: 0px; width: 100%; height: 100%; top: 0px; left: 0px; background-color: rgb(0, 0, 0); opacity: 0.03; cursor: wait; position: absolute;"></div> 抱歉,我对 selenium webdriver 很陌生。谁能帮我?我真的很感谢你的帮助! 以下错误信息: selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <span class="m-menu__link-text">...</span> is not clickable at point 表明无法单击所需的元素,因为其他一些元素正在拦截单击。 遇到这种情况,您可以尝试以下方法来解决。 使用 Selenium 的 显式等待: WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Span 1']"))).click() 进口: from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC 使用execute_script(): time.sleep(5) clickSpan = driver.find_element(By.XPATH, "//span[text()='Span 1']") driver.execute_script("arguments[0].click();", clickSpan) 进口: import time

回答 1 投票 0

XPath 选择整个 XPath 节点

是否可以选择 XPath 的整个路径而不是“最后”命中? 当我有以下 XML 时: ... 是否可以选择 XPath 的整个路径而不是“最后”路径? 当我有以下 XML 时: ... <TagA> <TagB Name="MyTagB"/> <TagB Name="MyOtherTagB"/> </TagA> ... 当我构建以下 XPath 时,我只得到“”,但我希望整个节点从“...”开始 //*[local-name()='TagA']/*[local-name()='TagB' and @Name='MyTagB']/following-sibling::*[local-name()='TagB' and @Name='MyOtherTagB'] 你尝试过吗//*[local-name()='TagA']

回答 1 投票 0

是否可以使用Xpath从srcset中找到当前源?

示例: 一个例子: <img class="lazyautosizes lazyloaded" src="//cdn.shopify.com/s/files/1/0332/0178/2916/products/trm044_150x150.png?v=1583128930" data-srcset="//cdn.shopify.com/s/files/1/0332/0178/2916/products/trm044_180x.png?v=1583128930 180w, //cdn.shopify.com/s/files/1/0332/0178/2916/products/trm044_240x.png?v=1583128930 240w, //cdn.shopify.com/s/files/1/0332/0178/2916/products/trm044_360x.png?v=1583128930 360w" srcset="//cdn.shopify.com/s/files/1/0332/0178/2916/products/trm044_180x.png?v=1583128930 180w, //cdn.shopify.com/s/files/1/0332/0178/2916/products/trm044_240x.png?v=1583128930 240w, //cdn.shopify.com/s/files/1/0332/0178/2916/products/trm044_360x.png?v=1583128930 360w"> 我想从 srcset 中找到在浏览器中呈现的链接。有没有一种方法可以编写一个指向该点的 xpath,例如 240w 的 xpath?该标签具有 src,但这不是浏览器中呈现的标签。 这就是我在 Puppeteer 中使用 xpath 的方式。我不想为某些特定类型的 xpath 编写特定逻辑。 - const getXpathElement = await page.$x(xpath) const promises = getXpathElement.map((element) => page.evaluate(el => { return el.textContent }, element)); 看起来currentSrc财产为我解决了这个问题。这是完整的工作解决方案: const getXpathElement = await page.$x(xpath); const promises = getXpathElement.map((element) => page.evaluate(el => { if (el.currentSrc && (el.tagName && el.tagName.toLowerCase() === "img")) // when the xpath ends with tag name, Ex: //div//img return el.currentSrc; else // when the xpath ends with property name, Ex: //div//div/@src return el.textContent }, element));

回答 1 投票 0

python selenium - dom - 超时错误 - 在下拉菜单中搜索

我是硒的新手, 我想在下拉列表“计划外本金付款”中选择特定项目,但出现超时错误 在此输入图像描述 在此输入图像描述 使用

回答 1 投票 0

无法定位元素:{"method":"link text","selector":"Sales Matrix"} SELENIUM 和 JAVA - JavascriptExecutor

我有一个带有可折叠动作的按钮: 它包含以下信息: 我有这个带有可折叠动作的按钮: 它包含以下信息: <strong data-bind="css: {'admin__collapsible-title': collapsible, title: !collapsible, '_changed': changed, '_loading': loading, '_error': error}" class="admin__collapsible-title"> <span data-bind="i18n: label">Sales Matrix</span> <!-- ko if: collapsible --><span class="admin__page-nav-item-messages"> <span class="admin__page-nav-item-message _changed"> <span class="admin__page-nav-item-message-icon"></span> <span class="admin__page-nav-item-message-tooltip" data-bind="i18n: 'Changes have been made to this section that have not been saved.'">Changes have been made to this section that have not been saved.</span> </span> <span class="admin__page-nav-item-message _error"> <span class="admin__page-nav-item-message-icon"></span> <span class="admin__page-nav-item-message-tooltip" data-bind="i18n: 'This tab contains invalid data. Please resolve this before saving.'">This tab contains invalid data. Please resolve this before saving.</span> </span> <span class="admin__page-nav-item-message-loader"> <span class="spinner"> <!-- ko repeat: 8 --><span data-repeat-index="0"></span><span data-repeat-index="1"></span><span data-repeat-index="2"></span><span data-repeat-index="3"></span><span data-repeat-index="4"></span><span data-repeat-index="5"></span><span data-repeat-index="6"></span><span data-repeat-index="7"></span><!-- /ko --> </span> </span> </span><!-- /ko --> </strong> 我尝试了很多方法来单击该按钮,但似乎没有任何效果。 我尝试过: a) driver.findElement(By.xpath("//span[contains(text(),'Sales Matrix')]")).click();. b) driver.findElement(By.xpath("//span[normalize-space()='Sales Matrix']")).click();. 我认为这是定位器问题,并且正在考虑使用一些JavascriptExecutor,但实际上不知道在这种情况下如何实现这一点。 我该怎么办? 我能够通过这样做解决这个问题: WebElement element = driver.findElement(By.xpath("//span[contains(text(),'Sales Matrix')]")); JavascriptExecutor executor = (JavascriptExecutor)driver; executor.executeScript("arguments[0].click();", element); 谢谢! 仅供参考,有不同的点击方式。 // Click using Action Actions actions = new Actions(browser); actions.click(tempWebElem).build().perform(); // Click using JS ((JavascriptExecutor) driver).executeScript("arguments[0].click();", tempWebElem); // Click using WebElement driver.findElement(tempElem).click(); // Click using Send Keys driver.findElement(tempElem).sendKeys(Keys.RETURN); 在我们的项目中,我将这些行放在嵌套的 try-catch 中,以便在遇到定位器问题时可以尝试其他方法。

回答 2 投票 0

Python Selenium 未从表获取 .text 属性

我在从标签中抓取 .text 属性时遇到问题。我正在尝试获取“数量”列中的数量。一共有7个,如下图 我在下面附上我的代码: 来自 sel...

回答 1 投票 0

逻辑应用jsonpath表达式根据另一个子子值更新子子节点

我在逻辑应用程序中有一个 XML,如下所示: a1 我在逻辑应用程序中有一个 XML,如下所示: <JournalCollection> <Journal> <ChangeCode> <Code>a1</Code> </ChangeCode> </Journal> <Journal> <ChangeCode> <Code>b1</Code> </ChangeCode> <Description>Description</Description> </Journal> <Journal> <ChangeCode> <Code>c1</Code> </ChangeCode> </Journal> </JournalCollection> 我只需要为代码 = b1 添加“描述”字段。我在变量中拥有该位置,但我无法使用 json 路径表达式,因为我发现逻辑应用程序不支持这一点: 在 json 路径表达式中添加变量来设置位置值会引发此错误: 我还尝试使用转换 XML 形状,但由于我需要检查目标架构中子元素的位置,因此我无法更新它。 有什么方法可以根据逻辑应用程序中的另一个子子节点值来更新子子节点的 XML? Java(或我知道的任何语言)本身不支持 JSON 路径。您需要一个 JSON 路径处理器,例如 Jayway。您可能需要以字符串形式向库提供路径,然后它将解析该路径并为您提供您正在寻找的结果。 不过,我不确定如何在 Azure 逻辑应用程序的上下文中包含外部库。 您可以在高级数据操作连接器中使用C# 脚本执行操作。 https://statesolutions.com.au/c-script-execute/ 就像JavaScript操作,但显然它使用C#,体验有点不同。 这是剧本... // Load the XML into an XmlDocument var xmlDoc = new System.Xml.XmlDocument(); xmlDoc.LoadXml(parameters.xml); // Find the <Journal> elements System.Xml.XmlNodeList journalNodes = xmlDoc.SelectNodes("//Journal"); // Loop through each <Journal> element foreach (System.Xml.XmlNode journalNode in journalNodes) { // Find the <ChangeCode> element var changeCodeNode = journalNode.SelectSingleNode("ChangeCode"); // Find the <Code> element under <ChangeCode> var codeNode = changeCodeNode.SelectSingleNode("Code"); // Check if the value of <Code> is "b1" if (codeNode.InnerText == "b1") { // Create a new <Description> element var descriptionElement = xmlDoc.CreateElement("Description"); descriptionElement.InnerText = "Description"; // Insert the <Description> element as a sibling to <ChangeCode> journalNode.InsertAfter(descriptionElement, changeCodeNode); } } // Display the modified XML return xmlDoc.OuterXml; ...除此之外,我还创建了一个名为 XML 的变量,用于存储不带 <Description> 元素的 XML 负载。然后,我将该值传递到 C# 脚本执行操作的 Parameters ... { "xml": @{variables('XML')} } ...这是配置为运行时的示例... 结果 如您所见,返回值为您提供了您想要的 XML(作为字符串)... { "returnValue": "<JournalCollection><Journal><ChangeCode><Code>a1</Code></ChangeCode></Journal><Journal><ChangeCode><Code>b1</Code></ChangeCode><Description>Description</Description></Journal><Journal><ChangeCode><Code>c1</Code></ChangeCode></Journal></JournalCollection>", "log": [] } 当然,如果需要的话,可以将脚本更改为更加通用/宽容,它很有针对性,但这是一种非常有效的方法。

回答 2 投票 0

使用依赖变量创建特定的 XSL

我正在尝试构建一个 XSL(t) 文件来为我的应用程序指定导入规则集。我的源 XML 来自 SPARQL。 问题是每个查询的变量数量都不同。什...

回答 1 投票 0

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

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

回答 1 投票 0

如何使用 selenium webdriver 单击角度元素?

需要下面的帮助才能单击()我无法单击“连接”按钮。我可以在 Chrome 开发工具中找到元素,但我的程序仍然失败。 按钮 HTML : 需要下面的帮助才能单击(),我无法单击按钮“Connexion”。我可以在 Chrome devtool 中找到元素,但我的程序仍然失败。 按钮 HTML : <button class="btn btn-lg hoverableButton ng-scope" translate="LOGIN" ng-disabled="authenticationCtrl.disableMageConnectButton()" ng-click="onSubmit()">Connexion</button> 我尝试过以下代码 By button = By.xpath("//button[@class='btn btn-lg hoverableButton ng-scope' and contains(@ng-click, 'authenticationCtrl.onSubmitMage()')]"); WebDriverWait wait = new WebDriverWait(webdriver, 15); wait.until(ExpectedConditions.elementToBeClickable(button)); webdriver.findElement(button).click(); 错误信息: 预期条件失败:等待元素可点击: By.xpath: //button[@class='btn btn-lg hideableButton ng-scope' 和 contains(@ng-click, 'authenticationCtrl.onSubmitMage()')] (尝试过 15 秒,间隔 500 毫秒) 和 没有这样的元素:无法定位元素: {"method":"xpath","selector":"//按钮[@class='btn btn-lg hideableButton ng-scope' 并包含(@ng-click, 'authenticationCtrl.onSubmitMage()')]"} 我在 devtools 和 xpath 上测试了 xpath,它找到了按钮。 谢谢。 如果 webdriver.findElement(button).click(); 投掷 没有这样的元素:无法找到元素: {"method":"xpath","selector":"//按钮[@class='btn btn-lg hideableButton ng-scope' 并包含(@ng-click, 'authenticationCtrl.onSubmitMage()' 这可能是因为元素在 iframe 中或在 DOM 中找不到定位器。 既然你说它存在于 DOM 中,我可能会说,我们这里可能有一个 iframe 问题。 Iframe: 该标签指定内联框架。 内联框架用于在当前文档中嵌入另一个文档 HTML 文档。 在 Selenium 中,我们需要将驱动程序焦点切换到特定的 iframe,以便与 iframe 内的元素进行交互: driver.switchTo.frame("Frame_ID"); 然后你应该能够做到: webdriver.findElement(By.xpath("//button[text()='Connexion']")).click(); 更新1: 有两个同名按钮,我非常确定xpath索引会起作用 第一个按钮: (//button[text()='Connexion'])[1] 第二个按钮: (//button[text()='Connexion'])[2] 更新2: WebDriverWait wait = new WebDriverWait(driver, 30); wait.until(ExpectedConditions.elementToBeClickable(By.xpath("(//button[text()='Connexion'])[2]"))).click(); 我看到了长长的评论树,但没有直接的答案。那么问题出在哪里呢?

回答 2 投票 0

即使 XML 标签为空,仍然会打印(xml version =“1.0”encoding ='utf-8')

我对我目前正在处理的 XSL 脚本有疑问。 脚本正在运行,没有遇到错误,但是,我的问题是在一些不支持的字段上......

回答 1 投票 0

如何使用selenium通过tag_name查找最近的父级

我正在使用 selenium-webdriver 处理“表格样式”网站。 有很多表的嵌套,并且它们没有 id 或 name 属性。 所以我决定在ta中获取标题文本...

回答 2 投票 0

如何在lxml中查找元素的直接子元素

我找到了一个具有特定类的对象: THREAD = TREE.find_class('线程')[0] 现在我想获取作为其直接子元素的所有 元素。 我试过: THREAD.findall("p") 线程.x... 我找到了一个具有特定类别的对象: THREAD = TREE.find_class('thread')[0] 现在我想获取其直接子元素的所有 <p> 元素。 我尝试过: THREAD.findall("p") THREAD.xpath("//div[@class='thread']/p") 但是所有这些都会返回此 <p> 内的所有 <div> 元素,无论该 <div> 是否是它们最近的父级。 我怎样才能让它发挥作用? 编辑: 示例 html: <div class='thread'> <p> <!-- 1 --> <!-- Can be some others <p> objects inside, which should not be counted --> </p> <p><!-- 2 --></p> </div> <div class='thread'> <p>[...]</p> <p>[...]</p> </div> 脚本应该找到两个对象<p>,它们是THREAD的子对象。我应该收到两个对象的列表,在示例 HTML 的注释中标记为“1”和“2”。 编辑2: 又一个澄清,因为人们会感到困惑: THREAD是存储在变量中的一些对象,可以是任何html元素。我想找到 <p> 对象,它们是 THREAD 的直接子对象。这些 <p> 不能位于 THREAD 外部,也不能位于 THREAD 内部的任何元素内部。 我不确定,但你的问题似乎出在 HTML 本身:请注意 有几个标签省略情况适用于 p 节点,因此段落的结束标签 <div class='thread'> <p>first <p>second</p> </p> </div> 简单地被解析器忽略,并且两个节点都被标识为兄弟节点,但不是父节点和子节点,例如 <div class='thread'> <p>first <p>second </div> 所以 XPath //div[@class="thread"]/p 会返回两个段落 您只需将 p 标签替换为 div 标签,您就会看到不同的行为: <div class='thread'> <div>first <div>second</div> </div> </div> 这里//div[@class="thread"]/div将仅返回第一个节点 如果我的假设不正确,请纠正我 尝试这个 XPath 表达式: //p[parent::div[@class='thread']] 或者用完整的Python表达式: THREAD.xpath("//p[parent::div[@class='thread']]") 另一种(逆)方法是这个 XPath 表达式: div[@class='thread']/child::p" 使用直接 child:: 轴并且仅选择直接子节点。 总结: 两个表达式中哪一个更快取决于 XPath 编译器。 child:: 是默认轴,如果没有给出其他轴则使用。 仅供参考:XPath 计数从 1 开始,并且 不是 0。 因此,关于您的 XML 示例,以下表达式 count(//div[@class='thread'][1]/child::p) 的结果是 2 - 计算 <p> <!-- 1 --> + <p><!-- 2 --></p> 的结果。 你可以尝试PARENT.getchildren() >>> root = etree.fromstring(xml) >>> root.xpath("//div[@class='thread']")[0].getchildren() [<Element p at 0x10b3110e0>, <Element p at 0x10b311ea8>]

回答 3 投票 0

如何在 XSLT XPath 表达式中使用变量?

如何将变量传递给 XSLT XPath。例如 如何将变量传递给 XSLT XPath。例如 <ns0:UnitCode> <xsl:value-of select="//ns1:Root/InputMessagePart_1/ ns2:ServiceMasterDetailsResponse/ ns2:ServiceMasterDetailResponse[$Counter]/ ns2:BASE_UOM/text()"/> </ns0:UnitCode> 其中 Counter 是我的 XSLT 变量。 我想将变量计数器的数值传递给上面的 XSLT XPath 表达式。 如何在 XSLT 中使用变量引用 XPath 在 select 属性中,使用 $var (如您所做的那样): <xsl:value-of select="/path/to/element[@id=$var]"/> 以下是在 XSLT 中使用变量引用的一些其他方法... 匹配图案 XSLT 1.0:不允许变量match: match属性的值包含a是错误的 VariableReference. XSLT 2.0:变量允许出现在match谓词或中 模式可能以 id FO 或关键函数调用开始, 前提是要匹配的值以文字形式提供 或对变量或参数的引用,以及键名(在 key 函数的大小写)作为字符串文字提供。这些 模式永远不会匹配根不是树中的节点 文档节点。 XSLT 2.0 匹配谓词变量示例: <xsl:variable name="globalVar" select="'value'"/> <xsl:template match="abc[. = $globalVar]"> 文字结果元素 在文字结果元素中,使用属性值模板: <img src="{$var}/image.jpg"/> 元素或属性名称 在元素或属性名称中,使用 xsl:element 或 xsl:attribute 以及属性值模板: <xsl:element name="{$var}">content</xsl:element> 或 <xsl:attribute name="{$var}">content</xsl:attribute>

回答 1 投票 0

非命名空间感知 DOM 中的命名空间 XML 出现奇怪的 XPath 结果?

我有以下代码会导致意外结果: 文档文档 = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(""...

回答 1 投票 0

带有命名空间的 xml 的 XPath

我有以下代码会导致意外结果: 文档文档 = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(""...

回答 1 投票 0

如何在WebdriverIO中获取元素完整的lxpath?

我有代码检查容器下是否显示具有特定文本的元素。 它工作得很好,虽然我使用了完整的 xpath,但是在我们更改选择器之后(它仍然得到......

回答 1 投票 0

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