标签: xpath

如何使用xpath替换xml中的第一个节点属性值

在下面的XML中,需要使用XPath替换命名空间.

<application xmlns="http://ns.adobe.com/air/application/4.0">
  <child id="1"></child>
  <child id="2"></child>
</application>
Run Code Online (Sandbox Code Playgroud)

我试过了

/application/@xmlns
Run Code Online (Sandbox Code Playgroud)

/*[local-name()='application']/@[local-name()='xmlns']
Run Code Online (Sandbox Code Playgroud)

两者都未能给出欲望输出.为了替换文本,我使用了xmltask替换.

<xmltask source="${temp.file1}" dest="${temp.file1}">
    <replace path="/application/@xmlns" withText="http://ns.adobe.com/air/application/16.0" />
</xmltask>
Run Code Online (Sandbox Code Playgroud)

ant xpath xmltask

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

当返回数据时,PHP SimpleXML xpath不保留名称空间

我试图注册一个名称空间,但是每次使用xpath返回的值时,我都必须一次又一次地注册相同的名称空间。

<?php

    $xml= <<<XML
<?xml version="1.0" encoding="UTF-8"?>
    <epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
       <response>
          <extension>
             <xyz:form xmlns:xyz="urn:company">
                <xyz:formErrorData>
                   <xyz:field name="field">
                      <xyz:error>REQUIRED</xyz:error>
                      <xyz:value>username</xyz:value>
                   </xyz:field>
                </xyz:formErrorData>
             </xyz:form>
          </extension>
       </response>
    </epp>
XML;
Run Code Online (Sandbox Code Playgroud)

解析器:

         $xmlObject = simplexml_load_string(trim($xml), NULL, NULL);
         $xmlObject->registerXPathNamespace('ns','urn:company');

        $fields = $xmlObject->xpath("//ns:field");

        foreach($fields as $field){

            //PHP Warning:  SimpleXMLElement::xpath(): Undefined namespace prefix in
            //$errors = $field->xpath("//ns:error");

            // I have to register the same namespace again so it works
            $field->registerXPathNamespace('ns','urn:company');
            $errors = $field->xpath("//ns:error"); // no issue

            var_dump((string)current($errors));

        }

?>
Run Code Online (Sandbox Code Playgroud)

请注意,我不得不在循环内再次注册名称空间,如果不这样做,我将得到以下错误:

// PHP警告:SimpleXMLElement :: xpath():...中的未定义名称空间前缀

您是否知道如何将注册的名称空间保留在xpath函数返回的simplexml对象中。

php xpath simplexml

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

为什么这个XPath不起作用?

我正试图获得股票的公司名称,行业和行业.我下载的HTML 'https://finance.yahoo.com/q/in?s={}+Industry'.format(sign),然后尝试用解析它.xpath()lxml.html.

要获取我正在尝试抓取的数据的XPath,我会转到Chrome中的网站,右键单击该项目,单击Inspect Element,右键单击突出显示的区域,然后单击Copy XPath.这在过去一直对我有用.

可以使用以下代码重现此问题(我使用Apple作为示例):

import requests
from lxml import html

page_p = 'https://finance.yahoo.com/q/in?s=AAPL+Industry'
name_p = '//*[@id="yfi_rt_quote_summary"]/div[1]/div/h2/text()'
sect_p = '//*[@id="yfncsumtab"]/tbody/tr[2]/td[1]/table[2]/tbody/tr/td/table/tbody/tr[1]/td/a/text()'
indu_p = '//*[@id="yfncsumtab"]/tbody/tr[2]/td[1]/table[2]/tbody/tr/td/table/tbody/tr[2]/td/a/text()'

page = requests.get(page_p)
tree = html.fromstring(page.text)

name = tree.xpath(name_p)
sect = tree.xpath(sect_p)
indu = tree.xpath(indu_p)

print('Name: {}\nSector: {}\nIndustry: {}'.format(name, sect, indu))
Run Code Online (Sandbox Code Playgroud)

这给出了这个输出:

Name: ['Apple Inc. (AAPL)']
Sector: []
Industry: []
Run Code Online (Sandbox Code Playgroud)

它没有遇到任何下载困难,因为它能够检索name,但其他两个不起作用.如果我分别用tr[1]/td/a/text()和替换它们的路径tr[1]/td/a/text(),它会返回:

Name: ['Apple Inc. (AAPL)']
Sector: ['Consumer Goods', 'Industry Summary', 'Company …
Run Code Online (Sandbox Code Playgroud)

html python xpath lxml

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

python lxml:不区分大小写的xpath标记名称匹配

我正在使用python + lxml来解析spss文件。

这个主题上似乎有很多话题,但是答案并没有特别帮助我。

我遇到的答案:

- lower-case the entire input before parsing; 
- if you know the complete list of tags in advance
Run Code Online (Sandbox Code Playgroud)

对我而言,这些建议将花费太多时间。

相反,我只想在必要时匹配字符串。

这是我要编辑的代码行:

xpath("//definition//variable[@name='"+tag_name+"']")
Run Code Online (Sandbox Code Playgroud)

如果tag_name是:

tag_name = "Q1top"
tag_name = "q1Top"
tag_name = "q1TOP"
etc
Run Code Online (Sandbox Code Playgroud)

我猜想某种形式的正则表达式会正常吗???

python xpath lxml case case-insensitive

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

XPATH - 如何根据兄弟属性/数据查询节点?

...More <book></book> objects here

<book>
  <author>John</author>
  <price>50</price>
</book>

<book>
  <author>Henry</author>
  <price>60</price>
</book>
... More <book></book> objects here
Run Code Online (Sandbox Code Playgroud)

我想price与作者一起获得这本书的价值John

这是我失败的尝试 //book//[self::author//text()="john"].//price

获取此price详细信息的正确查询是什么?

xpath

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

XPATH仅选择第一级子级

我有fowoling xml:

  <workflow URI=""> 
  <output ID="" URI="#out1"/>  
  <input ID="sessionToken" URI="#sessionToken"/>  
  <services> 
    <sequence> 
      <service URI=""> 
        <input ID="" URI=""/>  
        <input URI="" value=""/>  
        <output ID="" URI=""/> 
      </service> 
    </sequence> 
  </services> 
</workflow>
Run Code Online (Sandbox Code Playgroud)

我只想选择工作流节点的第一级子级,并从该选择中排除服务节点,所以就我而言,我只希望

 <output ID="" URI="#out1"/>  
 <input ID="sessionToken" URI="#sessionToken"/>  
Run Code Online (Sandbox Code Playgroud)

选择了这两个节点,为此,我想在Java中使用XPATH。附加要求是所选节点必须具有URI参数。

我已经试过了:

XPathExpression expr = xpath.compile("//workflow[@URI='" + oldUrlValue.getNodeValue() + "'] | //workflow//*[not(local-name() = 'services') and @URI]");
Run Code Online (Sandbox Code Playgroud)

但是我得到的所有节点都带有URI参数,而不是只有主要工作流程节点和前两个子节点。

我已经试过了

java xml xpath

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

如何在XPath中执行不区分大小写的搜索?

我试图使用XPath实现不区分大小写的搜索.我已经提到了如何在xquery中执行不区分大小写的属性选择器,因此请在标记为重复之前进行检查.我使用Lcase将我的variable(L_search)转换为小写和小写函数.

我原来区分大小写的XPath表达式是:

XPath       =  "//*[contains(., '"& search &"')]/ancestor-or-self::*/*[local-name()='home' and @locale='en']"
Run Code Online (Sandbox Code Playgroud)

我尝试过很多组合,比如:

XPath       =  "//*lower-case([contains(., '"& L_search &"')])/ancestor-or-self::*/*[local-name()='home' and @locale='en']"

XPath       =  "//*[contains(lower-case(.), '"& L_search &"')])/ancestor-or-self::*/*[local-name()='home' and @locale='en']"
Run Code Online (Sandbox Code Playgroud)

但他们都没有产生结果.

这是我正在运行的代码:

Sub ProcessFolder(FolderPath)
    On Error Resume Next
    Set fldr = fso.GetFolder(FolderPath)

    Set Fls = fldr.files
    For Each thing in Fls
            sFSpec = FSO.GetAbsolutePathName(thing)
            objMSXML.async = True
            objMSXML.load sFSpec
             If 0 = objMSXML.parseError Then
                Dim sXPath   : sXPath       =  "//*[contains(., '"& search &"')]/ancestor-or-self::*/*[local-name()='name' and @locale='en']"

                Dim querySubject : Set …
Run Code Online (Sandbox Code Playgroud)

xml vbscript xpath msxml

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

Scrapy:XPath错误:// media:content中的表达式无效

我想从新闻网站RSS Feed中提取内容,如下所示

<item>
<title>BPS: Kartu Bansos Bantu Turunkan Angka Gini Ratio</title>
<media:content url="/image.jpg" expression="full" type="image/jpeg"/>  </item>
Run Code Online (Sandbox Code Playgroud)

但是引发错误当使用像media.xpath('// media:content')之类的xpath解析信息时使用像media:content这样的 内容

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python2.7/site-packages/parsel/selector.py", line 183, in xpath
    six.reraise(ValueError, ValueError(msg), sys.exc_info()[2])
  File "/usr/local/lib/python2.7/site-packages/parsel/selector.py", line 179, in xpath
    smart_strings=self._lxml_smart_strings)
  File "src/lxml/lxml.etree.pyx", line 1587, in lxml.etree._Element.xpath (src/lxml/lxml.etree.c:57923)
  File "src/lxml/xpath.pxi", line 307, in lxml.etree.XPathElementEvaluator.__call__ (src/lxml/lxml.etree.c:167084)
  File "src/lxml/xpath.pxi", line 227, in lxml.etree._XPathEvaluatorBase._handle_result (src/lxml/lxml.etree.c:166043)
ValueError: XPath error: Undefined namespace prefix in //media:content
Run Code Online (Sandbox Code Playgroud)

有人知道我该怎么办?谢谢 :)

python xpath web-crawler scrapy

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

Selenium + XPath:“后续兄弟”只能用于下一个元素吗?

有一个简化的html表

<table>
    .....
    <tr/>
    <tr class="base"/>
    <tr class="check"/>
    <tr/>
    <tr class="base2"/>
    <tr class="check"/>
    .....
</table>
Run Code Online (Sandbox Code Playgroud)

对于硒,我有一个早期发现的具有“ base”类的元素。

var row = table.FindElement(By.ClassName("base"));
Run Code Online (Sandbox Code Playgroud)

我需要使用“检查”类获得下一行,但前提是该行存在(否则为例外)。

var nextRow = row.FindElement(By.XPath("following-sibling::tr[@class='check'][1]")
Run Code Online (Sandbox Code Playgroud)

问题是,如果我的班级缺席,则此xpath在班级为'base2'的行之后为我提供了'check'类的行。

是否可以通过“跟随同级”来验证下一个元素,但不是全部?

selenium xpath selector

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

使用Xpath包含ID?

<div id="content-body-14269002-17290547">
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
</div>
Run Code Online (Sandbox Code Playgroud)

我需要选择一切 id = "content-body*"

每个页面上的内容 - 主体更改,可能需要使用通配符

xpath dom scrapy

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

标签 统计

xpath ×10

python ×3

lxml ×2

scrapy ×2

xml ×2

ant ×1

case ×1

case-insensitive ×1

dom ×1

html ×1

java ×1

msxml ×1

php ×1

selector ×1

selenium ×1

simplexml ×1

vbscript ×1

web-crawler ×1

xmltask ×1