在下面的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) 我试图注册一个名称空间,但是每次使用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对象中。
我正试图获得股票的公司名称,行业和行业.我下载的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) 我正在使用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)
我猜想某种形式的正则表达式会正常吗???
...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详细信息的正确查询是什么?
我有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参数,而不是只有主要工作流程节点和前两个子节点。
我已经试过了
我试图使用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) 我想从新闻网站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)
有人知道我该怎么办?谢谢 :)
有一个简化的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'类的行。
是否可以通过“跟随同级”来验证下一个元素,但不是全部?
<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*"
每个页面上的内容 - 主体更改,可能需要使用通配符?