xpath 相关问题

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

网页抓取的困难

我刚刚看到一篇名为《史上最伟大的 500 首歌曲》的文章,心想“哦,太酷了,我打赌他们还制作了一个我可以关注的 Spotify/Apple 音乐列表”。嗯……他们不……

回答 1 投票 0

从oracle中的XML clob列中查找特定字符串

有人可以让我知道如何使用 oracle 中的 regx/任何其他命令从以下 2 个示例 xml 的第二行中仅提取以 .xsd 结尾的 URL。 请注意 - 这整个 xml 是...

回答 1 投票 0

如何使用 LINQ 根据不同属性的值修改功能标记属性

我有以下 XML 源: 我有以下 XML 来源: <?xml version="1.0"?> <report> <feature tag="Config"/> <feature tag="Runtime"> <feature tag="Metadata"> <property name="date" value="16.01.2025"/> <property name="time" value="09:31:34"/> </feature> <feature tag="Templates"> <feature tag="Template"> <property name="username" value="myself"/> <property name="password" value="something"/> <feature tag="Data sources"> <feature tag="Source"> <property name="name" value="modules"/> <property name="driver" value="eval"/> </feature> <feature tag="Source"> <property name="name" value="Artifact"/> <property name="driver" value="eval"/> </feature> <feature tag="Source"> <property name="name" value="Comments"/> <property name="driver" value="eval"/> </feature> </feature> </feature> </feature> </feature> </feature> </report> 我想修改 driver 属性的 value(位于功能标签 Source 下方),但前提是 name 属性的值(位于功能标签 Source 下方)等于单词“模块”。 我尝试使用以下函数仅提取特征标签Source。我认为可以在一个 LINQ 命令中按照我想要的方式修改属性,但我不知道如何在 XPath 中制定此 if 构造。 Private Function ModifyXml(ByVal xml As String) As Boolean Try Dim xdoc As New XDocument xdoc = XDocument.Parse(xml) Dim query As String = "/report/feature[@tag='Runtime']/feature[@tag='Templates']/feature[@tag='Template']/feature[@tag='Data sources']/feature[@tag='Source']" xdoc.XPathSelectElements(query).ToList() xdoc.Save("c:\temp\myFile.xml") Return True Catch ex As Exception Return False End Try End Function 结果应该是这样的: 我需要属性中的驱动程序名称作为值。该驱动程序名称取决于名称属性的值。 <?xml version="1.0"?> <report> <feature tag="Config"/> <feature tag="Runtime"> <feature tag="Metadata"> <property name="date" value="16.01.2025"/> <property name="time" value="09:31:34"/> </feature> <feature tag="Templates"> <feature tag="Template"> <property name="username" value="myself"/> <property name="password" value="something"/> <feature tag="Data sources"> <feature tag="Source"> <property name="name" value="modules"/> <property name="driver" value="somedriver1"/> </feature> <feature tag="Source"> <property name="name" value="Artifact"/> <property name="driver" value="somedriver2"/> </feature> <feature tag="Source"> <property name="name" value="Comments"/> <property name="driver" value="somedriver3"/> </feature> </feature> </feature> </feature> </feature> </feature> </report> XPath 查询,它不会修改。顾名思义, XPathSelectElements 返回所需的节点。你必须处理 其中每一个并修改正确的子元素。这 非常规的 XML 模式使这变得比需要的更加困难 -模板、来源、评论等都应该是元素,而不是通用属性中的值。当前格式无法获得灵活性。 LINQ也是一种查询,而不是一种修改语言,它不会修改。 无论您使用哪种语言,都必须迭代 他们产生的特征元素,并为每个元素检索名称或 驱动孩子并修改他们的值属性。 Panagiotis Kanavos 的评论

回答 1 投票 0

导入 XML 函数 - 股票价格 - Google 表格

我正在尝试通过 Google Sheets 使用 IMPORTXML 导入 ETF 股票的价值。来自 URL:https://www.justetf.com/en/etf-profile.html?isin=DE000A1DCTL3。到目前为止我所拥有的: =导入XML(“...

回答 2 投票 0

无法在selenium中选择产品范围

我试图通过使用java中的流来获取Web元素并单击“添加到购物车”,但无法首先获取该元素。 这是代码。 WebDriver 驱动程序 = new EdgeDriver(); 司机....

回答 1 投票 0

Python代码打开网站,选择1周数据,点击下载csv链接超时异常是什么原因?

我想打开网页https://www.nseindia.com/companies-listing/corporate-filings-announcements,选择选项卡SME和公告1周(1W),然后应该点击的...

回答 1 投票 0

使用 XMLPropertyListConfiguration 和 XPathExpressionEngine 在数组中设置/添加属性

我正在尝试使用 XPath 键规范添加/更新 .plist 文件中的属性。我已经用一个如下所示的文件进行了测试: 我正在尝试使用 XPath 键规范在 .plist 文件中添加/更新属性。我已经使用如下所示的文件进行了测试: <?xml version="1.0"?> <!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd"> <plist version="1.0"> <dict> <key>testProp</key> <array> <string>text</string> <string>54</string> <string>2023-11-09T16:29:34Z</string> </array> <key>objectProp</key> <array> <string>text</string> <integer>54</integer> <date>2023-11-09T16:29:34Z</date> </array> </dict> </plist> 和一个像这样构建的 XMLPropertyListConfiguration 对象: File file = new File("path/to/config.plist"); XMLPropertyListConfiguration configuration = new FileBasedConfigurationBuilder<>(XMLPropertyListConfiguration.class) .configure(new Parameters().xml() .setFile(file) .setExpressionEngine(new XPathExpressionEngine())) .getConfiguration(); // do any changes, then save the file using: FileHandler handler = new FileHandler(configuration); handler.save(file); 我的目标:编辑数组属性之一中的值,或将新值插入数组中。我原以为 configuration.setProperty("/testProp[2]", "a different string") 会导致以下结果(为了简洁起见,删除了一些部分): <key>testProp</key> <array> <string>text</string> <string>a different string</string> <string>2023-11-09T16:29:34Z</string> </array> 而是添加了 testProp[2] 作为自己的属性: <?xml version="1.0"?> <!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd"> <plist version="1.0"> <dict> <key>testProp</key> <array> <string>text</string> <string>54</string> <string>2023-11-09T16:29:34Z</string> </array> <key>objectProp</key> <array> <string>text</string> <integer>54</integer> <date>2023-11-09T16:29:34Z</date> </array> <key>testProp[2]</key> <string>a different string</string> </dict> </plist> 我的理解是,您使用 testProp[n] 谓词来指定 testProp 的第 n 个属性/值,但显然这里的情况并非如此。我对数组有什么特别遗漏的吗?或者我是否必须将 testProp 读取为 List,修改列表,然后将整个列表另存为 testProp?我正在寻找的最佳解决方案是可以在 XPath 字符串中包含所有相关信息,但如果我需要单独处理数组中的索引,也可以处理。 也许尝试使用路径 /testProp/array[2] 而不是 /testProp[2]。

回答 1 投票 0

Python Selenium XPath 有时会发生变化,因此它不会在页面上选择正确的元素

所以我正在使用 Selenium 通过网站按重复的时间表预订一些东西。预计周二预订8天后的周三。 我已经得到要执行的程序...

回答 1 投票 0

Xpath 包含而不是精确匹配

我使用以下 xpath 根据元素“group”值返回所有“path”元素: //最近/项目/位置[group="rgrp1"]/路径 这很好用,但是匹配...

回答 1 投票 0

从Soap响应获取数据转换成java对象?

我有一项肥皂服务,它以以下格式给我回复 我有一项肥皂服务,它以以下格式给我回复 <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Body> <ns2:getUsersResponse xmlns:ns2="http://soap.com/"> <return> <email>email</email> <id>uid</id> <lastName>last_name</lastName> <userName>first_name</userName> </return> <return> <email>[email protected]</email> <id>[email protected]</id> <lastName>Scott</lastName> <userName>Aladdin</userName> </return> <return> <email>[email protected]</email> <id>[email protected]</id> <lastName>Wonderland</lastName> <userName>Alice</userName> </return> </ns2:getUsersResponse> </S:Body> </S:Envelope> 我想将其转换为下面给出的类的java对象。 class User { String uid ; String email; String fisrtName; String lastName; } 通过使用 Xpath ,我没有找到正确的方法?? 为什么不使用 Axis2 或 CXF 这样的 Web 服务框架? 或者简单地使用“wsgen”和 JAX-WS 注释? 这里有一些教程: http://www.mkyong.com/webservices/jax-ws/jax-ws-hello-world-example-document-style/ http://www.mkyong.com/tutorials/jax-ws-tutorials/ http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/2.0/tutorial/doc/JAXWS3.html 注意: 您需要首先在 Web 服务的 WSDL 上运行 wsgen (或等效程序)。 您可能不想想要通过对特定 SOAP 响应进行逆向工程来手动编写 Java 代码。 上面的教程应该会让这一点更清楚......

回答 1 投票 0

如何检查元素是否存在?

在我使用 Firefox Selenium WebDriver 的 C# Windows 窗体应用程序中,我需要检查某个元素是否存在,如果不存在,请单击另一个元素。如果有视频,看了之后就变成了

回答 9 投票 0

如何在 Firefox 中验证 xpath 或 css 选择器?

很久以前,我在firefox中使用fire-path插件来验证我的选择器是否能找到selenium测试所需的所有元素,但我不知道如何在当前情况下执行此操作...

回答 1 投票 0

如何在 Java 扩展函数中从 net.sf.saxon.expr.XPathContext 获取声明的命名空间

类似于这个问题:如何获取声明的变量 我正在为 Java 扩展函数编写代码,需要从命名空间声明中查找给定前缀的命名空间 URI...

回答 1 投票 0

获取带有最后日期的 xml 节点

我有下一个xml: 2010年6月20日 4.txt <

回答 5 投票 0

在node.js中使用XPath

我正在用node.js构建一个小型文档解析器。为了进行测试,我有一个原始 HTML 文件,通常是在应用程序执行时从真实网站下载的。 我想提取第一个代码

回答 3 投票 0

如何在 C# 中使用 Selenium 定位表格中的文本并引用该元素单击另一个元素?

我在思考时遇到了麻烦,因为在网络表格上搜索特定文本(CustId)的最佳方法是什么?一旦找到搜索文本,然后单击 t 上的选择按钮。 .

回答 4 投票 0

如何在Python中替换xml节点值,而不更改整个文件

在 python 中执行我的第一步时,我尝试解析和更新 xml 文件。 xml如下: 在 python 中执行第一步时,我尝试解析并更新 xml 文件。 xml如下: <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet href="util/style/aaaa-2-0.xsl" type="text/xsl"?> <test dtd-version="3.2" xmlns:test="http://www.ich.org/test" xmlns:xlink="http://www.w3c.org/1999/xlink"> <mr> <leaf checksum="88ed245997a341a4c7d1e40d614eb14f" > <title>book name</title> </leaf> </mr> </test> 我想更新校验和的值。我已经用一种方法编写了一个类: @staticmethod def replace_checksum_in_index_xml(xml_file_path, checksum): logging.debug(f"ReplaceChecksumInIndexXml xml_file_path: {xml_file_path}") try: from xml.etree import ElementTree as et tree = et.parse(xml_file_path) tree.find('.//leaf').set("checksum", checksum) tree.write(xml_file_path) except Exception as e: logging.error(f"Error updating checksum in {xml_file_path}: {e}") 我调用该方法: xml_file_path = "index.xml" checksum = "aaabbb" Hashes.replace_checksum_in_index_xml(xml_file_path, checksum) 校验和确实已更新。而且整个 xml 结构也发生了变化: <test dtd-version="3.2"> <mr> <leaf checksum="aaabbb"> <title>book name</title> </leaf> </mr> </test> 如何仅更新给定节点,而不更改给定 xml 文件中的其他任何内容? 不幸的是,我还没有找到使用您正在使用的库 xml.etree 的解决方案。相反,请考虑使用 lxml。以下对我有用: class Hashes: @staticmethod def replace_checksum_in_index_xml(xml_file_path, checksum): try: from lxml import etree tree = etree.parse(xml_file_path) leaf = tree.find('.//leaf') if leaf is not None: leaf.set("checksum", checksum) with open(xml_file_path, 'wb') as file: tree.write(file, xml_declaration=True, encoding='utf-8', pretty_print=False) except Exception as e: print(f"Error updating checksum in {xml_file_path}: {e}")

回答 1 投票 0

如何从 Select-Xml 调用本机 XPath 函数?

使用 PowerShell Core 7.4.6。 给定文件 /path/to/file.csproj 使用 PowerShell Core 7.4.6。 给定文件/path/to/file.csproj <Project Sdk="Microsoft.NET.Sdk"> <ItemGroup> <ProjectReference Include="Path\To\Something.csproj" /> </ItemGroup> </Project> 我希望以下代码片段将使用内置 XPath ProjectReference 函数从该文件中选择 ends-with 节点 select-xml -path "/path/to/file.csproj" ` -xpath "/Project/ItemGroup/ProjectReference[ends-with(@Include, 'Something.csproj')]" 但是它会产生错误 Select-Xml: Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined function. 如果我尝试使用 XPath 函数命名空间显式确定其范围 select-xml -path "/path/to/file.csproj" ` -xpath "/Project/ItemGroup/ProjectReference[fn:ends-with(@Include, 'Something.csproj')]" ` -namespace @{ "fn" = "http://www.w3.org/2005/xpath-functions" } 我收到了不同的错误 Select-Xml: XsltContext is needed for this query because of an unknown function. 我错过了什么? Select-Xml 的文档提到调用 XPath 函数没有限制,因此我假设它们是本机支持的。 .NET 中的内置 XPath 支持仅涵盖 XPath 版本 1.0/1.1 指定的功能 - 并且 ends-with 直到版本 2 才成为 XPath 的一部分。 您可以使用 substring/string-length 来切断字符串的尾部并寻找它: $tailValue = 'Something.csproject' $xPathEndsWithExpression = "/Project/ItemGroup/ProjectReference[substring(@Include, string-length(@Include) - $($tailValue.Length - 1)) = '${tailValue}')]" Select-Xml -Path "/path/to/file.csproj" -XPath $xPathEndsWithExpression

回答 1 投票 0

使用 Rvest 进行网页抓取 - 使用 xpath 将表提取为数据框

我正在尝试使用通过 Chrome 浏览器复制的 XPath 提取此页面 https://clinicaltrials.gov/study/NCT05817110?tab=history 上的表格 我尝试过使用这段代码,但它不...

回答 1 投票 0

使用 Rvest 进行 Webscarping - 使用 xpath 将表提取为数据框

我正在尝试使用通过 Chrome 浏览器复制的 XPath 提取此页面“https://clinicaltrials.gov/study/NCT05817110?tab=history”上的表格 我尝试过使用这段代码,但它......

回答 1 投票 0

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