xpath 相关问题

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

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

Kotlin/Native Cinterop 与 libxml2 - 损坏的 XPath 表达式

版本 科特林 1.9.22 libxml 2.9.14+dfsg-1.3 操作系统:Ubuntu 23.10 问题 在一个小型 Kotlin/Native 应用程序中,我使用 cinterop 和 libxml2 来评估一组 XPath 表达式以提取元素

回答 1 投票 0

使用 document.evaluate() 选择包含撇号的 HTML 元素

我正在尝试使用 document.evaluate() 选择一个包含 1'000 g 的元素。问题是撇号。我尝试使用 \u0027、''、\'、\' 和 ',但它们要么触发无效的 xpath

回答 1 投票 0

在Python中使用xpath和selenium选择HTML元素

感谢您让我在这里提出问题。我是 Selenium 和 XPath 的新手,只是想使用 Python 抓取一个不太简单的网站。 我的问题是: 您对我的具体问题有答案吗...

回答 2 投票 0

Javascript - 验证 xpath 是否存在:$x 与 document.evaluate?

我需要验证网页上的特定元素是否存在。我只需要 true/false、null/string、0/1 或类似的响应。当我用谷歌搜索这个时,我找到的所有解决方案都使用 document.evaluate (并且...

回答 1 投票 0

使用属性名称从 simplexml_load_string 中提取 xml 元素

我想从下面提到的属性名称(sm_field_base_url)或xpath上的XML bsed中提取sm_field_base_url。我怎样才能做到这一点。 我正在使用 simplexml_load_string() 来解析 xml

回答 1 投票 0

从下一个父节点查找特定节点

我正在准备一个 C# 应用程序,其中我必须处理 xml 内容。 我正在准备一个 C# 应用程序,其中我必须处理 xml 内容。 <Document> <SW.Blocks.FC ID="0"> <ObjectList> <SW.Blocks.CompileUnit ID="4" CompositionName="CompileUnits"> <AttributeList> <NetworkSource> <StructuredText xmlns="http://www.siemens.com/automation/Openness/SW/NetworkSource/StructuredText/v3"> <NewLine Num="2" UId="116" /> <Access Scope="GlobalVariable" UId="117"> <Symbol UId="118"> <Component Name="TP40" UId="119" /> <Token Text="." UId="120" /> <Component Name="IN" UId="121" /> <Token Text="." UId="122" /> <Component Name="StopSeg" UId="123" /> <Address Area="None" Type="Bool" BlockNumber="3" BitOffset="3024" Informative="true" /> </Symbol> </Access> <Blank Num="29" UId="124" /> <Token Text=":=" UId="125" /> <Blank Num="1" UId="126" /> <Access Scope="GlobalVariable" UId="127"> <Symbol UId="128"> <Component Name="I_TP40B1" UId="129" /> <Address Area="Input" Type="Bool" BitOffset="1026" Informative="true" /> </Symbol> </Access> <Token Text=";" UId="130" /> <NewLine Num="1" UId="131" /> </NetworkSource> </AttributeList> </SW.Blocks.CompileUnit> </ObjectList> </SW.Blocks.FC> </Document> 根据给定的用户输入“StopSeg”,我需要获取名称为“I_TP40B1”的组件节点。有人可以帮我为此编写 XPath 吗?或任何 C# 代码? 您在结构化文本标签中缺少结束正斜杠。我会使用 Xml Linq 库而不是 XPath。请参阅下面的代码以获取示例 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; using System.Xml.Linq; namespace ConsoleApp10 { class Program { const string FILENAME = @"c:\temp\test.xml"; static void Main(string[] args) { XDocument doc = XDocument.Load(FILENAME); XElement symbol = doc.Descendants().Where(x => x.Name.LocalName == "Symbol").FirstOrDefault(); XNamespace ns = symbol.GetDefaultNamespace(); XElement component = symbol.Element(ns + "Component"); string name = (string)component.Attribute("Name"); } } }

回答 1 投票 0

获取属性值并设置为变量

我是机器人框架的新手。我想获取一个值并将其设置为变量。该值是订单金额,每次都会不同。我成功地创建了这个 xpath,其数量与以往相同...

回答 1 投票 0

为什么 RSelenium 无法找到我的 xpath?

我必须在网站上反复执行搜索(https://franklin.genoox.com/clinical-db/home) 很久以前,我发现了 Rselenium 包,并且我之前已经成功使用过它(Af...

回答 1 投票 0

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