标签: xpath

Selenium:更改By-instance或concat两个By-instances

是否可以组合/连接两个Bys?

如果我有一个 By

By parentBy = new By.xpath(".//div[@class='parent']")
Run Code Online (Sandbox Code Playgroud)

和另一个 By

By childBy = new By.xpath(".//div[@class='child']")
Run Code Online (Sandbox Code Playgroud)

是否可以将两个Bys连接到具有此xpath的新Bys?

By combinedBy = new By.xpath(".//div[@class='parent']/div[@class='child']")
Run Code Online (Sandbox Code Playgroud)

就像是

By combinedBy1 = parentBy + childBy
By combinedBy2 = parentBy.Concat(childBy)
Run Code Online (Sandbox Code Playgroud)

用例:

我们使用页面对象模型.

现在我有一个表作为一种子页面对象模型.该表应该有一个选择一些数据的方法.由于一些html结构问题(它是第三方),我必须通过检查一个单元格的类和该单元格的文本/内容来xpath一个div(行)的子表.

java selenium xpath findby selenium-webdriver

1
推荐指数
2
解决办法
2523
查看次数

从XML中提取一小部分数据

我正在编写一个C#/ VB程序,用于根据XML中收到的信息报告数据.

我的情况是我每月收到许多XML(大约100-200) - 每个大小从10mb到350mb不等.对于这些XML中的每一个,我只需要一小部分数据(少于任何一个文件的整个数据的5%),以便生成必要的报告.

此外,该数据子集将始终保持在相同的键结构中(它可能存在于多个键中,也可能存在于不同的级别,但它始终存在于相同的键名中/包含它的键将始终具有具有相同的属性,如"名称"等)

所以,我目前关于如何做到这一点的想法是:

  1. 创建一个"scraper",它将使用XPath从XML中提取必要的数据.
  2. 将SQL Server表中的小部分必要数据与存储在单独表中的文件特征数据一起存储,以便知道这些数据来自哪个文件
  3. 将数据查询到程序中以进行报告.

我的主要问题是什么才是最好的方法来获取数据?我最熟悉XPath,但是对于200MB大小的多个文件,我担心在整个文件中加载性能问题.

我见过/研究的其他事情是:

  1. 创建一个XSLT文件,只从XML转换/拉取我想要的数据
  2. 使用Linq到XML
  3. 以某种方式将XML链接到SQL服务器,然后能够直接查询它们
  4. 使用ADO从程序中查询XML
  5. 使用XMLReader类完成它(而不是完全加载每个XML)
  6. 也许有一个原生的.Net组件已经很好地做到了这一点

老实说,我不知道标准是什么,因为大量的XML和文件大小的差异,我不熟悉任何其他方法 - 例如,链接XMLs到SQL Server直接/使用ADO来查询XML - 因此,不知道它们可能的好处/缺点.

如果你们中的任何一个人处于类似的情况,我真的很感激任何一种正确方向的指针/至少验证我的方法不是最糟糕的那个:)

谢谢!!!

.net c# xml xslt xpath

1
推荐指数
1
解决办法
157
查看次数

XSLT - 将URI反斜杠转换为正斜杠

我们正在将旧版HTML文件转换为DITA.我想在href属性中转换带有反斜杠的Windows路径

<a href="c:\developer\file.html">
Run Code Online (Sandbox Code Playgroud)

转发斜线

<xref href="c:/developer/file.dita">
Run Code Online (Sandbox Code Playgroud)

我试图使用替换和翻译(XSLT是v2)但没有成功.我也尝试了http://geekswithblogs.net/Erik/archive/2008/04/01/120915.aspx上的string.replace方法,结果相同.

xslt xpath xslt-2.0 dita

1
推荐指数
1
解决办法
2435
查看次数

XSLT - 如何更改其值包含给定子字符串的任何属性的值

给出以下xml:

<inventory>
  <item name="..." sku="123"/>
  <item name="..." sku="not available"/>
  <catalog vendor="...">
      <product id="--not available--"/>
      <product id="345"/>
  </catalog
</inventory>
Run Code Online (Sandbox Code Playgroud)

我想替换其中"不可用"的任何属性值(任何地方)'000'.

我在XSLT中尝试了不同的组合(这不是我的强项),当我为每个属性添加特定的XPath表达式时,我能够替换它们.不幸的是,我可能正在处理的XML文档(形成良好的思想)可能具有不同的结构和属性命名约定.

所有重要的是扫描特定属性值(或值模式)并将其替换为特定于问题的默认值.我发现自己只是在Python中破解了一个解决方案(加载文档,迭代DOM并修改符合条件的任何节点中的任何属性.)

但我真的想在XSLT中学习这个解决方案(无论是替换匹配模式的属性值,还是直接字符串比较),如果存在的话.如果你愿意,可以有专业的好奇心.

任何帮助,将不胜感激.关于解释这些XLST/XPath复杂性的源或书的任何建议都会很棒(我只发现了非常简单的例子,没有任何像这样的任意.)

xml xslt xpath

1
推荐指数
1
解决办法
512
查看次数

XPath以选择名称开头的节点

我有看起来像这样的XML:

<detail>
  <address>
    <line1/>
    <line2/>
    <line3/>
    <postcode/>
  </address>
</detail/>
Run Code Online (Sandbox Code Playgroud)

我可以选择任意数量的<line*>节点,而其他我不想选择的节点。

我已经尝试过了,但这似乎不起作用(无论如何在C#中):

/detail/address/[substring(name(),4) = 'line']
Run Code Online (Sandbox Code Playgroud)

铝,帮助赞赏!

c# xml xpath

1
推荐指数
1
解决办法
2345
查看次数

XSLT将新元素添加到XML的根元素

我想在根节点关闭之前的XML文档末尾添加几个元素,并且我正在使用XSL进行转换。

源XML可以包含任何无关紧要的节点,子节点等。其中的所有内容都应复制到转换后的文档中,此外还必须添加一些其他元素。

我对XSL,XSLT和XPath完全陌生,所以我无疑是在犯错误。

我所有的XSL都是这样的:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes" />

    <!-- tried directives -->

</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

这是我发现并尝试过的,但是没有成功。

<xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>

    <my-el></my-el>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

我读过那是身份模板,所以我想用它来复制所有内容以及一个附加元素。但这会<my-el></my-el>在源文档的每个元素内添加。

在阅读了一些有关XSLTXPath的w3schools教程之后,我尝试了:

<xsl:template match="/">
<xsl:copy-of select="."></xsl:copy-of>
<my-elem />
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

但是它<my-elem />在根元素的结束标记之后添加。

你能帮我吗?

背景:我正在玩,以xml-maven-plugin通过配置web.xml文件触发向Web应用程序文件中添加一些配置。我希望将文件中所有现有的XML复制到输出文档中,再加上一些(现在就足够了)。

这是源web.xml文件:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">

<display-name>My Project</display-name>
    <welcome-file-list>
        index.jsp
    </welcome-file-list>
</web-app>
Run Code Online (Sandbox Code Playgroud)

我想实现类似此问题的要求,但是必须将新节点添加到根元素(即,查看对该问题答案的评论)。

xml xslt xpath

1
推荐指数
1
解决办法
5220
查看次数

lxml-如何获取HtmlElement的xpath?

使用XML etree,可以执行以下操作:

etree.getpath(element

如何用HTML而不是XML来做同样的事情?

html python xml xpath lxml

1
推荐指数
1
解决办法
1767
查看次数

仅在没有类时选择节点

我正在使用HTMLAgilityPack来抓取一堆标签。有些分配了几个类别中的1个,有些则没有分类。是那些我不需要上课的人。

我知道,按班级获取一个节点,我们可以做类似的事情;

.SelectNodes("//table[@class=\"pagelinks\"]");
Run Code Online (Sandbox Code Playgroud)

同样,您可以选择忽略特定的类或ID。

.SelectNodes("//table[not(@class=\"pagelinks\")]");
Run Code Online (Sandbox Code Playgroud)

但是,有一种方法可以仅在&仅当它没有类时才抓住节点吗?

任何指针将不胜感激。

谢谢。

c# xpath html-agility-pack

1
推荐指数
1
解决办法
309
查看次数

为什么这个xmlns属性搞砸了我的xpath查询?

我正在使用LibXML解析一个简单的jhove输出.但是,我没有得到我期望的价值.这是代码:

use feature "say";
use XML::LibXML;

my $PRSR = XML::LibXML->new();
my $xs=<DATA>; 
say $xs;
my $t1 = $PRSR->load_xml(string => $xs);
say "1:" . $t1->findvalue('//date');
$xs=<DATA>; 
say $xs;
$t1 = $PRSR->load_xml(string => $xs);
say "2:" . $t1->findvalue('//date');


__DATA__
<jhove xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://hul.harvard.edu/ois/xml/ns/jhove" xsi:schemaLocation="http://hul.harvard.edu/ois/xml/ns/jhove http://hul.harvard.edu/ois/xml/xsd/jhove/1.3/jhove.xsd" name="Jhove" release="1.0 (beta 3)" date="2005-02-04"><date>2006-10-06T09:11:34+02:00</date></jhove>
<jhove><date>2006-10-06T09:11:34+02:00</date></jhove>
Run Code Online (Sandbox Code Playgroud)

如您所见,"1:"行返回一个空字符串,而"2:"返回预期日期.jhove-root-element中的什么使xpath查询无法正常工作?我甚至在XML-Spy中尝试过它,即使有完整的标题也可以.

编辑:当我从根元素中删除xmlns属性时,xpath查询工作.但那怎么可能呢?

perl xpath libxml2

1
推荐指数
1
解决办法
444
查看次数

C#根据不需要的属性值列表从XMLDocument中删除整个元素

我有一个XML文件,例如

<Bars1>
    <Bar name='0'>245</Bar>
    <Bar name='1'>180</Bar>
    <Bar name='2'>120</Bar>
    <Bar name='3'>60</Bar>
    <Bar name='4'>0</Bar>
</Bars1>
<Bars2>
    <Bar name='0'>25</Bar>
    <Bar name='1'>10</Bar>
    <Bar name='2'>10</Bar>
    <Bar name='3'>6</Bar>
    <Bar name='4'>0</Bar>
</Bars2>
<Gubbins3>
    <Bar name='0'>45</Bar>
    <Bar name='1'>18</Bar>
    <Bar name='2'>12</Bar>
    <Bar name='3'>4</Bar>
    <Bar name='4'>0</Bar>
</Gubbins3>
Run Code Online (Sandbox Code Playgroud)

和一个List<int>notNeededBarNames,包含例如{1,3}

我已经将XML文件加载到XmlDocumentxmlDoc中,并且想要删除任何"Bar"元素,其中属性"name"是我列表中的整数之一,无论它在XML中可能存在于何处.我的例子很小,但实际上文档和列表可能非常大.

这样做有一个很好的方法吗?我可以"蛮力"它,但我不禁觉得可能有更好的方法.

希望你能帮忙!

c# xpath xmldocument

1
推荐指数
1
解决办法
650
查看次数