XPath的主要目的是解决XML文档的各个部分。它还提供操纵弦乐,数字和布尔值的基本设施。 XPath使用紧凑的非XML语法。 XPath在XML文档的抽象逻辑结构上运行,而不是表面语法。
在Python中解析Google Earth KML文件(lxml,命名空间)
我正在尝试使用 xml 模块将 .kml 文件解析为 Python(在我用于 HTML 的 BeautifulSoup 中未能完成此操作之后)。 因为这是我第一次这样做,所以我就跟着走了......
未捕获的 DOMException:无法在“CommandLineAPI”上执行“$”:不是有效的选择器
我正在使用 selenium 为我的网页编写自动化 UI 测试。 我正在测试的网页上有一个元素: << input type="checkbox" id="screening_questions[0].multiple_choice[0]-
我尝试使用 XPath 来选择 svg 元素的 fill 属性值,该值使用 CSS 变量,但我没有得到任何回报。 HTML: 我尝试使用 XPath 选择 svg 元素的 fill 属性值,该值使用 CSS 变量,但我什么也没得到。 HTML: <svg class="unf-icon" viewBox="0 0 24 24" width="24" height="24" fill="var(--N400, #6C727C)" style="display: inline-block; vertical-align: middle;"> <path d="M9.5 18a.999.999 0 01-.71-1.71l4.3-4.29-4.3-4.29a1.004 1.004 0 011.42-1.42l5 5a.998.998 0 010 1.42l-5 5a1 1 0 01-.71.29z"></path> </svg> XPath 尝试: //*[name()='svg' and fill='#6C727C'] //*[name()='svg' and @fill="#6C727C"] //*[name()='svg' and @contain(fill, "#6C727C")] 第三次尝试最接近。 改变 //*[name()='svg' and @contains(fill, "#6C727C")] 到 //*[name()='svg' and contains(@fill, "#6C727C")] 如果您想检查 fill 属性值是否有 "#6C727C" 的子字符串,或 //*[name()='svg' and @fill="var(--N400, #6C727C)"] 如果您想检查 fill 属性值是否完全等于 "var(--N400, #6C727C)" 另请参阅 HTML 5、内联 SVG 和 SVG DOM 的命名空间感知 CSS var()功能
我已阅读了我能找到的所有内容,但只是想确认以下内容不是有效的 XPath 表达式,因为标题中提到的原因。 //行程/[@trainID] 我已经发现
我正在努力扩展当前的 SimpleXML XPath 以包含“或”条件。 这是下面的原始(工作)代码,没有任何“或”条件。 $strXpathVar = "奖学金/研究&q...
我正在尝试从企业链接列表中抓取谷歌地图评论。我在为评论数据选择正确的选择器时遇到错误,因为不同的链接和评论 xpath 有所不同。有吗
XPath 根据以下节点选择节点,但前提是该节点包含某个元素
给定这个 XML 文档存根(我无法修改其生成)... 给定这个 XML 文档存根,(我无法修改其生成)... <Datastream parserApplicationName="mscorlib" parserApplicationVersion="4.0.0.0" parserAssemblyName="Prophet21.Datastream" parserAssemblyVersion="23.1.1.0"> <JOBXXXXDEF type="1" typeName="JobHeader" key="{a52722bf-c784-4d0a-b80c-d60a55179cb5}" InputFileName=""> <COPIES>1</COPIES> <HDRXXXXDEF > <TITLE>QUOTATION</TITLE> <ORDER_ACK_NUMBER>1000998</ORDER_ACK_NUMBER> </HDRXXXXDEF> <LINEXXXDEF lineno ="1" > <ORDERED_QTY>1.00</ORDERED_QTY> <ORDER_UOM>EA</ORDER_UOM> </LINEXXXDEF> <LINEXXXDEF lineno ="2"> <EXDSCXXDEF > <EXTENDED_DESCRIPTION>Delivery: 17-20 Weeks</EXTENDED_DESCRIPTION> </EXDSCXXDEF> </LINEXXXDEF> <LINEXXXDEF lineno ="3"> <ASCMPXXDEF > <QTY_PER_ASSEMBLY>1.00</QTY_PER_ASSEMBLY> </ASCMPXXDEF> </LINEXXXDEF> <LINEXXXDEF lineno ="4"> <EXDSCXXDEF > <EXTENDED_DESCRIPTION>Stainless Steel Design</EXTENDED_DESCRIPTION> </EXDSCXXDEF> </LINEXXXDEF> <LINEXXXDEF lineno ="5"> <ASCMPXXDEF > <QTY_PER_ASSEMBLY>1.00</QTY_PER_ASSEMBLY> </ASCMPXXDEF> </LINEXXXDEF> <LINEXXXDEF lineno ="6"> <ORDERED_QTY>1.00</ORDERED_QTY> <ORDER_UOM>EA</ORDER_UOM> </LINEXXXDEF> <LINEXXXDEF lineno ="7"> <EXDSCXXDEF > <EXTENDED_DESCRIPTION>Added to the above if required.</EXTENDED_DESCRIPTION> </EXDSCXXDEF> </LINEXXXDEF> <TOTALSXDEF > <SUBTOTXDEF > <TOTAL_LINES>2</TOTAL_LINES> <SUB_TOTAL>1,880.00</SUB_TOTAL> <TAXES>0.00</TAXES> <TOTAL_ECO_FEE>0.00</TOTAL_ECO_FEE> <RETAIL_DELIVERY_FEE>0.00</RETAIL_DELIVERY_FEE> <JURISDICTION_DESC /> </SUBTOTXDEF> <GRDTOTXDEF "> <GRAND_TOTAL>1,880.00</GRAND_TOTAL> <CURRENCY_DESC>U.S. Dollars</CURRENCY_DESC> </GRDTOTXDEF> </TOTALSXDEF> </FORMXXXDEF> </JOBXXXXDEF> </Datastream> 我需要一个或多个 XPath 查询来选择 LINEXXDEF 有一个名为 ASCMPXXDEF 的子节点的整个节点,然后如果该父节点之后的 NEXT LINEXXDEF 有一个名为 EXDSCXXDEF 的子节点,我需要该节点。 所以在上面,我需要这些节点,用于上面的第 3、4 和 5 行 <LINEXXXDEF lineno ="3"> <ASCMPXXDEF > <QTY_PER_ASSEMBLY>1.00</QTY_PER_ASSEMBLY> </ASCMPXXDEF> </LINEXXXDEF> <LINEXXXDEF lineno ="4"> <EXDSCXXDEF > <EXTENDED_DESCRIPTION>Stainless Steel Design</EXTENDED_DESCRIPTION> </EXDSCXXDEF> </LINEXXXDEF> <LINEXXXDEF lineno ="5"> <ASCMPXXDEF > <QTY_PER_ASSEMBLY>1.00</QTY_PER_ASSEMBLY> </ASCMPXXDEF> </LINEXXXDEF> 我需要第 3 行,因为它有 ASCMPXXDEF 作为子项,我需要第 4 行,因为它有一个名为 EXDSCXXDEF 的子项,我需要第 5 行,因为它又有一个 ASCMPXXDEF 子项。 我最接近的是这个 XPATH //ASCMPXXDEF/parent::*/following-sibling::LINEXXXDEF[EXDSCXXDEF][1] | //ASCMPXXDEF/parent::* 但这正在回归 <LINEXXXDEF lineno ="3"> <ASCMPXXDEF > <QTY_PER_ASSEMBLY>1.00</QTY_PER_ASSEMBLY> </ASCMPXXDEF> </LINEXXXDEF> <LINEXXXDEF lineno ="4"> <EXDSCXXDEF > <EXTENDED_DESCRIPTION>Stainless Steel Design</EXTENDED_DESCRIPTION> </EXDSCXXDEF> </LINEXXXDEF> <LINEXXXDEF lineno ="5"> <ASCMPXXDEF > <QTY_PER_ASSEMBLY>1.00</QTY_PER_ASSEMBLY> </ASCMPXXDEF> </LINEXXXDEF> <LINEXXXDEF lineno ="7"> <EXDSCXXDEF > <EXTENDED_DESCRIPTION>Added to the above if required.</EXTENDED_DESCRIPTION> </EXDSCXXDEF> </LINEXXXDEF> 但它包括第 7 行,这是我不想要的,因为第 7 行不直接跟随包含 ASCMPXXDEF 的 LINEXXXDEF 节点。 有没有办法让 XPATH 仅评估下一个同级? 本质上我得到了第 7 行,因为第 5 行是一个 ASCMPXXDEF 节点,但如果它直接位于第 6 行之后,我只需要它。第 6 行是我的评估过程的重新启动...但 XPATH 会跳过它,但因为第 7 行在第 5 行之后,所以它被包含在内。 我也在使用 C# 工作,如果有更简单的操作方法... 我正在尝试找出如何删除包含 EXDSCXXDEF 但紧随包含 ASCMPXXDEF 的节点之后的任何节点 <LINEXXXDEF lineno ="3"> <ASCMPXXDEF > <QTY_PER_ASSEMBLY>1.00</QTY_PER_ASSEMBLY> </ASCMPXXDEF> </LINEXXXDEF> <LINEXXXDEF lineno ="4"> <EXDSCXXDEF > <EXTENDED_DESCRIPTION>Stainless Steel Design</EXTENDED_DESCRIPTION> </EXDSCXXDEF> </LINEXXXDEF> <LINEXXXDEF lineno ="5"> <ASCMPXXDEF > <QTY_PER_ASSEMBLY>1.00</QTY_PER_ASSEMBLY> </ASCMPXXDEF> </LINEXXXDEF> *this node below should not be included <LINEXXXDEF lineno ="7"> <EXDSCXXDEF > <EXTENDED_DESCRIPTION>Added to the above if required.</EXTENDED_DESCRIPTION> </EXDSCXXDEF> </LINEXXXDEF>* 下面的XPath将会得到你想要的。 /Datastream/JOBXXXXDEF/LINEXXXDEF[ ASCMPXXDEF or (EXDSCXXDEF and preceding-sibling::LINEXXXDEF[1][ASCMPXXDEF ]) ] 点网小提琴
我正在尝试从下拉菜单中选择该选项。但它没有被选中。测试用例通过,没有任何错误,也没有选择该选项。因为它是 HTML 下拉菜单,所以我...
Selenium WebDriver By.xpath 并不总是有效
信息: 我从配置文件中获取 fieldXpath,它是“//input[@id='signin_password']” HTML: 信息: 我从配置文件中得到fieldXpath,它是"//input[@id='signin_password']" HTML: <li><input type="password" name="signin[password]" id="signin_password" /></li> 有效:(但并非总是如此) 陷入困境... public void doAction(WebDriver driver) throws TestException { try { WebElement el = driver.findElement(By.xpath(fieldXpath)); el.clear(); el.sendKeys(fieldValue); } catch (Exception e) { throw new TestException(this.getClass().getSimpleName() + ": problem while doing action : " + toString()); } } 是否有解决方案可以使该代码与 XPath 一起使用? 我发现了问题...:selenium WebDriver StaleElementReferenceException *This may be caused because the page isn't loaded completely when the code starts or changes when the code is executed. You can either try to wait a little longer for the element or catch the StaleReferenceException and try again finding the div and the span.* 我的代码:(在每个字段之前调用这些函数) /** * Handle StaleElementReferenceException * @param elementXpath * @param timeToWaitInSec */ public void staleElementHandleByXpath(String elementXpath, int timeToWaitInSec) { int count = 0; while (count < 10) { try { WebElement slipperyElement = driver.findElement(By.xpath(elementXpath)); if (slipperyElement.isDisplayed()) { slipperyElement.click(); // may throw StaleElementReferenceException } count = count + 10; } catch (StaleElementReferenceException e) { count = count + 1; // try again } catch (ElementNotVisibleException e) { count = count + 10; // get out } catch (Exception e) { count = count + 10; // get out } finally { // wait X sec before doing the action driver.manage().timeouts().implicitlyWait(timeToWaitInSec, TimeUnit.SECONDS); } } } /** * Wait till the document is really ready * @param js * @param timeToWaitInSec */ public void waiTillDocumentReadyStateComplete(JavascriptExecutor js, int timeToWaitInSec) { Boolean ready = false; int count = 0; while (!ready && count < 10) { ready = (Boolean) js.executeScript("return document.readyState == 'complete';"); // wait X sec before doing the action driver.manage().timeouts().implicitlyWait(timeToWaitInSec, TimeUnit.SECONDS); count = count + 1; } } 使用单引号 ' 而不是 "。所以 String fieldXpath = "//input[@id='signin_password']";
我正在尝试提取在此页面底部找到的表格。 我已经加载了 rvest 库并尝试了几个函数来尝试获取该表。即使用我
使用 XQuery/XPath 计算多个 XML 文件中的不同值
我有几个 XML 文件,它们都具有相同的结构。我需要找到每个元素中出现的所有不同值并对每个不同的出现次数进行计数。 这样做的最佳方法是什么...
我有与此类似的 XML: 11111 我有与此类似的 XML: <orders> <orderCompleteRequestType> <Head> <Aufnr>11111</Aufnr> </Head> <Register> <Id>180</Id> <value1>11</value1> <value2>22</value2> </Register> <Register> <Id>181</Id> <value1>3</value1> <value2>43</value2> </Register> <Register> <Id>160</Id> <value1>5</value1> <value2>25</value2> </Register> </orderCompleteRequestType> <orderCompleteRequestType> <Head> <Aufnr>22222</Aufnr> </Head> <Register> <Id>280</Id> <value1>1</value1> <value2>12</value2> </Register> <Register> <Id>160</Id> <value1>12</value1> <value2>7</value2> </Register> <Register> <Id>281</Id> <value1>94</value1> <value2>22</value2> </Register> </orderCompleteRequestType> </orders> 我想从每个“orderCompleteRequestType”结构中选择 CSV 格式的一些值: 头/奥夫恩 注册/ID 寄存器/值1 寄存器/值2 使用以下命令行时: xmlstarlet sel -T -t -m "/orders/orderCompleteRequestType" -v "Head/Aufnr" -o ";" -v "Register/Id" -o ";" -v "Register/value1" -o ";" -v "Register/value2" -n -n test.xml 我得到: 11111;180 181 160;11 3 5;22 43 25 22222;280 160 281;1 12 94;12 7 22 所以,首先是 Register/Id 节点的所有值,接下来是所有 Register/value1,最后是所有 Register/value2,但我期望的是这样的: 11111;180;11;22 11111;181;3;43 11111;160;5;25 22222;280;1;12 22222;160;12;7 22222;281;94;22 任何人都可以帮助我,因为我的大脑拒绝工作...... 不要匹配 orderCompleteRequestType,而是考虑匹配 Register... xmlstarlet sel -T -t -m "/orders/orderCompleteRequestType/Register" -v "concat(../Head/Aufnr,';',Id,';',value1,';',value2)" -n test.xml 输出... 11111;180;11;22 11111;181;3;43 11111;160;5;25 22222;280;1;12 22222;160;12;7 22222;281;94;22 每个orderCompleteRequestType之间没有额外的换行符,但这也许没什么大不了的?如果是,那么编写 XSLT 并使用 xmlstarlet 调用它可能会更容易。
编译的 XPath 查询通常使用什么样的数据结构?只是 AST 还是其他什么?如果是的话,DOM 中的搜索通常是如何实现的?这只是深度优先搜索吗
导入 xml.etree.ElementTree 作为 ET 树:ET = ET.parse(文件) tree.find('.//ns1:tag/@someattribute', ns) 导致 {KeyError}'@',据我所知,xpath 表达式是正确的,是否有...
我想获取一系列地图并找到不同的值,显而易见的事情是。 我想获取一系列地图并找到不同的值,显而易见的事情是。 <xsl:variable name="sequence" select=" ( map { 'foo' : 1, 'bar' : () }, map { 'foo' : 1, 'bar' : '3' }, map { 'foo' : 1, 'bar' : '3' } )" as="map(xs:string,item()*)*"/> <xsl:variable name="distinct" select="distinct-values($sequence)"/> 但这引发了警告 Error in xsl:variable/@select on line 29 column 76 of PurchasableSeasonOG.content.xsl: FOTY0013 An atomic value is required for the first argument of fn:distinct-values(), but the supplied type is a map type, which cannot be atomized 即地图不是原子值,这很公平。 我期待答案是 ( map { 'foo' : 1, 'bar' : () }, map { 'foo' : 1, 'bar' : '3' } ) 但是你会怎么做呢? 附注 我可以看到如何使用硬编码的 for-each-group 来做到这一点,甚至构建一个递归函数来通过 for-each-group 来做到这一点,尽管我希望 XPath 工具箱中有东西可以做到这一点,并且我正在努力按可能是空序列的键进行分组。 deep-equal适用于地图,所以一种方法是 <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"> <xsl:variable name="sequence" select=" ( map { 'foo' : 1, 'bar' : () }, map { 'foo' : 1, 'bar' : '3' }, map { 'foo' : 1, 'bar' : '3' } )" as="map(xs:string,item()*)*"/> <xsl:output method="adaptive"/> <xsl:template match="/" name="xsl:initial-template"> <xsl:sequence select="fold-left($sequence, (), function($a, $m) { $a, $m[not(some $m2 in $a satisfies deep-equal($m, $m2))] })"/> </xsl:template> </xsl:stylesheet>
NoSuchElementException:没有这样的元素:无法找到元素
免责声明:十多年后我又重新开始编写脚本,因此对于这样一个基本问题提前表示歉意,但非常需要和感谢帮助。 我最近尝试寻找自动脚本...
我正在尝试在 Selenium (Java) 中找到以下按钮: 我的按钮 元素r的innerHTML和innerText...
连接父节点和子节点的 Oracle BI Publisher Excel 模板
我有一个项目列表的主要数据集,其中包含“项目 ID”列和多个子集,用于每个项目的不同信息,其中包含“项目 ID”和“值...”
我正在用Python编写一个网络爬虫来获取产品列表的当前补丁版本。我试图通过 XPATH 查找文本,但被告知不存在这样的元素。我已经尝试过...