标签: xpath

我可以在XPath表达式中使用正则表达式吗?

喜欢.//div[@id='foo\d+]用div捕获div标签的东西id='foo123'.

我正在使用.NET,如果这很重要的话.

.net regex xml xpath

59
推荐指数
2
解决办法
7万
查看次数

XPath:选择**具有特定名称的子元素

<a>
   <b/>
   <c/>
   <d/>
   <b/>
   <e/>
</a>
Run Code Online (Sandbox Code Playgroud)

如何选择那些不是"b"的"a"的孩子?

xpath

58
推荐指数
2
解决办法
4万
查看次数

XPath - node()和text()之间的区别

我无法理解之间的差异text()node().根据我的理解,在这种情况下text(),标签之间的任何东西<item>apple</item>都是苹果.节点将是节点实际上的任何节点,这将是项目

但后来我被分配了一些工作,它要求我"选择生产中所有项目的文本",另一个问题是"选择所有部门中的所有经理节点"

输出如何看起来text()与之相反node()

XML片段:

<produce>
 <item>apple</item>
 <item>banana</item>
 <item>pepper</item>
</produce>

<department>
 <phone>123-456-7891</phone>
 <manager>John</manager>
</department>
Run Code Online (Sandbox Code Playgroud)

当然,有更多的部门和更多的经理,但这只是一小段代码.

任何帮助将非常感激!

xml xpath expression

57
推荐指数
1
解决办法
12万
查看次数

是否有适用于SAX型号的XPath处理器?

我正在寻找一个XPath评估器,它不会重建整个DOM文档来查找文档的节点:实际上该对象是使用SAX模型管理大量XML数据(理想情况下超过2Gb),这非常有利于内存管理,并提供搜索节点的可能性.

谢谢大家的支持!

对于所有那些说不可能的人:我最近在问到这个问题后,发现了一个名为"saxpath"的项目(http://www.saxpath.org/),但我找不到任何实施项目.

java xml xpath sax

56
推荐指数
5
解决办法
3万
查看次数

使用XPath选择XML节点时如何忽略命名空间

我必须解析一个如下所示的XML文档:

 <?xml version="1.0" encoding="UTF-8" ?> 
 <m:OASISReport xmlns:m="http://oasissta.caiso.com/mrtu-oasis/xsd/OASISReport.xsd" 
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="http://oasissta.caiso.com/mrtu-oasis/xsd/OASISReport.xsd http://oasissta.caiso.com/mrtu-oasis/xsd/OASISReport.xsd">
  <m:MessagePayload>
   <m:RTO>
    <m:name>CAISO</m:name> 
    <m:REPORT_ITEM>
     <m:REPORT_HEADER>
      <m:SYSTEM>OASIS</m:SYSTEM> 
      <m:TZ>PPT</m:TZ> 
      <m:REPORT>AS_RESULTS</m:REPORT> 
      <m:MKT_TYPE>HASP</m:MKT_TYPE> 
      <m:UOM>MW</m:UOM> 
      <m:INTERVAL>ENDING</m:INTERVAL> 
      <m:SEC_PER_INTERVAL>3600</m:SEC_PER_INTERVAL> 
     </m:REPORT_HEADER>
     <m:REPORT_DATA>
      <m:DATA_ITEM>NS_PROC_MW</m:DATA_ITEM> 
      <m:RESOURCE_NAME>AS_SP26_EXP</m:RESOURCE_NAME> 
      <m:OPR_DATE>2010-11-17</m:OPR_DATE> 
      <m:INTERVAL_NUM>1</m:INTERVAL_NUM> 
      <m:VALUE>0</m:VALUE> 
     </m:REPORT_DATA>
Run Code Online (Sandbox Code Playgroud)

问题是名称空间"http://oasissta.caiso.com/mrtu-oasis/xsd/OASISReport.xsd"有时可能会有所不同.我想完全忽略它,只是从标记MessagePayload下游获取我的数据.

我到目前为止使用的代码是:

String[] namespaces = new String[1];
  String[] namespaceAliases = new String[1];

  namespaceAliases[0] = "ns0";
  namespaces[0] = "http://oasissta.caiso.com/mrtu-oasis/xsd/OASISReport.xsd";

  File inputFile = new File(inputFileName);

  Map namespaceURIs = new HashMap();

  // This query will return all of the ASR records.
  String xPathExpression = "/ns0:OASISReport
                             /ns0:MessagePayload
                              /ns0:RTO
                               /ns0:REPORT_ITEM
                                /ns0:REPORT_DATA";
  xPathExpression += "|/ns0:OASISReport
                        /ns0:MessagePayload …
Run Code Online (Sandbox Code Playgroud)

xml xpath namespaces xml-namespaces

55
推荐指数
2
解决办法
8万
查看次数

Java:如何通过org.w3c.dom.document上的xpath字符串定位元素

如何通过给定org.w3c.dom.document上的xpath字符串快速定位元素/元素?似乎没有FindElementsByXpath()方法.例如

/html/body/p/div[3]/a
Run Code Online (Sandbox Code Playgroud)

我发现,当存在大量同名元素时,递归迭代所有子节点级别会非常慢.有什么建议?

我不能使用任何解析器或库,只能使用w3c dom文件.

java xpath dom

55
推荐指数
1
解决办法
5万
查看次数

Javascript获取节点的XPath

无论如何在Javascript中返回一个DOM元素的XPath字符串?

javascript xpath dom

54
推荐指数
6
解决办法
5万
查看次数

Java XPath(Apache JAXP实现)性能

注意:如果您遇到此问题,请在Apache JIRA上进行投票:

https://issues.apache.org/jira/browse/XALANJ-2540

我得出了一个令人惊讶的结论:

Element e = (Element) document.getElementsByTagName("SomeElementName").item(0);
String result = ((Element) e).getTextContent();
Run Code Online (Sandbox Code Playgroud)

似乎是比这快100倍的令人难以置信的:

// Accounts for 30%, can be cached
XPathFactory factory = XPathFactory.newInstance();

// Negligible
XPath xpath = factory.newXPath();

// Negligible
XPathExpression expression = xpath.compile("//SomeElementName");

// Accounts for 70%
String result = (String) expression.evaluate(document, XPathConstants.STRING);
Run Code Online (Sandbox Code Playgroud)

我正在使用JVM的JAXP默认实现:

org.apache.xpath.jaxp.XPathFactoryImpl
org.apache.xpath.jaxp.XPathImpl
Run Code Online (Sandbox Code Playgroud)

我真的很困惑,因为很容易看出JAXP如何优化上面的XPath查询来实际执行一个简单的getElementsByTagName().但它似乎并没有这样做.此问题仅限于大约5-6个经常使用的XPath调用,这些调用由API抽象和隐藏.这些查询涉及/a/b/c仅针对始终可用的DOM文档的简单路径(例如,无变量,条件).因此,如果可以进行优化,则很容易实现.

我的问题:XPath的缓慢是一个公认的事实,还是我忽略了什么?是否有更好(更快)的实施?或者我应该完全避免XPath,简单查询?

java apache performance xpath jaxp

54
推荐指数
2
解决办法
2万
查看次数

name()和local-name()有什么区别?

我真的不明白XPath函数namelocal-name.

你能举例说明他们会有所不同吗?

编辑

鉴于这个例子:

<?xml version="1.0" ?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head></head>
</html>
Run Code Online (Sandbox Code Playgroud)

我对这两个查询得到了相同的结果://*[local-name()="head"]//*[name()="head"].这是为什么?

xml xpath

53
推荐指数
1
解决办法
5万
查看次数

Selenium Webdriver在子元素中查找元素

我试图用Selenium(版本2.28.0)搜索子元素中的元素,但selenium des似乎没有将其搜索限制为子元素.我这样做错了还是有办法使用element.find来搜索子元素?

举个例子,我用这段代码创建了一个简单的测试网页:

<!DOCTYPE html>
<html>
    <body>
        <div class=div title=div1>
            <h1>My First Heading</h1>
            <p class='test'>My first paragraph.</p>
        </div>
        <div class=div title=div2>
            <h1>My Second Heading</h1>
            <p class='test'>My second paragraph.</p>
        </div>
        <div class=div title=div3>
            <h1>My Third Heading</h1>
            <p class='test'>My third paragraph.</p>
        </div>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我的python(2.6版)代码如下所示:

from selenium import webdriver

driver = webdriver.Firefox()

# Open the test page with this instance of Firefox

# element2 gets the second division as a web element
element2 = driver.find_element_by_xpath("//div[@title='div2']")

# Search second division for a paragraph …
Run Code Online (Sandbox Code Playgroud)

python selenium xpath

52
推荐指数
3
解决办法
5万
查看次数