作为一个简单的例子,我试图获取所有包含电子邮件地址的 dom 对象。
$doc = new DOMDocument;
$doc->loadHTML($page);
$xpath = new DOMXPath($doc);
$body = $doc->getElementsByTagName('table')->item(0);
$query = "//text()[fn:matches(., '[\w\d\.-]+@[\w\d\.-]+\.[a-zA-Z]{2,4}')]"; //
$entries = $xpath->evaluate($query, $body); //
foreach ($entries as $entry) {
echo "Found {$entry->textContent}<br>\n";
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:"DOMXPath::evaluate() [domxpath.evaluate]: xmlXPathCompOpEval: function matches bound to undefined prefix fn ..."
我也尝试过该方法
//text()[
php:function('BooleanPregMatch', '[\w\d\.-]+@[\w\d\.-]+\.[a-zA-Z]{2,4}', .)
]
Run Code Online (Sandbox Code Playgroud)
没有成功。
我找不到很多与 fn:match 或 php:function 相关的示例。任何援助将不胜感激。
考虑以下XML片段:
<doc>
<chapter id="1">
<item>
<para>some text here</para>
</item>
</chapter>
</doc>
Run Code Online (Sandbox Code Playgroud)
在 中XQuery,我有一个函数需要根据作为参数传入的给定“para”元素的祖先章节执行一些操作,如下面的精简示例所示:
declare function doSomething($para){
let $chapter := $para/ancestor::chapter
return "some stuff"
};
Run Code Online (Sandbox Code Playgroud)
在该示例中,$chapter始终显示为空。但是,如果我编写类似于以下的函数(即不使用祖先 axis),我会得到所需的“章节”元素:
declare function doSomething($para){
let $chapter := $para/../..
return "some stuff"
};
Run Code Online (Sandbox Code Playgroud)
问题是我不能像后一个示例中那样使用显式路径,因为XMl我将要搜索的内容不能保证每次都将“chapter”元素作为祖父母。它可能是曾祖父母或曾曾祖父母,等等,如下所示:
<doc>
<chapter id="1">
<item>
<subItem>
<para>some text here</para>
</subItem>
</item>
</chapter>
</doc>
Run Code Online (Sandbox Code Playgroud)
有谁能解释为什么轴不起作用,而显式 XPath 却起作用?另外,有人对如何解决这个问题有什么建议吗?
谢谢。
现在这个谜团已经解开了。
有问题的节点是在另一个函数中重新创建的,其结果是剥离了它的所有祖先信息。不幸的是,以前的开发人员没有记录这个奇妙的小功能,并且花费了我们很多时间。
因此,祖先轴完全按照其应有的方式工作 - 它只是应用于欺骗性节点。
我感谢大家为回答我的问题所做的努力。
您好,我尝试使用 xpath 和多个 AND OR 运算符来选择 XML 项目,但没有成功。
我需要过滤某个字段等于某个值以及一个或多个其他字段等于另一个值的位置,例如。
field1[contains[value1]] and field2[contains[value2]] or field3[contains[value3]] or field4[contains[value4]]
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,这仍然给出字段 1 不包含 value1 的结果,因为 field3 包含 value3。我需要它仅在 field1 确实包含 value1 并且任何一个或多个其他字段包含相应的值时才给出结果。
这就是我目前所拥有的(注意方括号中的一些元素是变量)...
//item[SubCategory[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),translate('[data:row("Title")]', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'))] and Group[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),translate('[session:naroomaShown]', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'))]|Group[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),translate('[session:moruyaShown]', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'))]|Group[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),translate('[session:batemansShown]', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'))]]
<table class="gridtable" cellspacing="0" __gwtcellbasedwidgetimpldispatchingfocus="true" gwtcellbasedwidgetimpldispatchingblur="true" style="width: 100%;">
<thead>
<colgroup>
<tbody style="">
<tr class="GORM0XEDKD GORM0XEDME" onclick="">
<td class="GORM0XEDJD GORM0XEDLD GORM0XEDMD GORM0XEDNE">
<td class="GORM0XEDJD GORM0XEDLD GORM0XEDNE GORM0XEDGE">
<div style="outline:none;" tabindex="0"></div>
</td>
</tr>
</tbody>
<tbody style="display: none;">
<tfoot style="display: none;">
</table>
Xpath for the text field -
EmailTemplateEditorTemplateName= By.xpath("//*[contains(@class,'GORM0XEDJD GORM0XEDLD GORM0XEDNE GORM0XEDGE')]/div[1]");
Run Code Online (Sandbox Code Playgroud)
尝试了以下选项。但所有这些都无法将文本发送到 EmailTemplateEditorTemplateName 文本字段
1. driver.findElement(DesignerLocators.EmailTemplateEditorTemplateName).sendKeys("yahooo");
2. this.WaitForElement(DesignerLocators.EmailTemplateEditorTemplateName);
WebElement tempname = driver.findElement(DesignerLocators.EmailTemplateEditorTemplateName);
JavascriptExecutor rightexecutor = (JavascriptExecutor)driver;
rightexecutor.executeScript("arguments[0].setAttribute('value','yahoo')", tempname);
3. WebElement Element=driver.findElement(DesignerLocators.EmailTemplateEditorTemplateName);
Actions builder = new Actions(driver); …Run Code Online (Sandbox Code Playgroud)我需要提取 2 个<br>标签之前的文本,即text 3. 该代码类似于以下内容:
<div>
<br>
text1
<br>
text2
<br>
text3
<br>
<br>
text4
<br>
</div>
Run Code Online (Sandbox Code Playgroud)
我试过//div/text()[preceding-sibling::br],但是,它提取了所有的文本。
我正在使用 appium 1.6.0-beta1、Xcode 8、iPhone iOS 10 模拟器和 java 编写移动自动测试。
我想找到不使用 xpath 的元素。在 appium 1.5.3 中可以使用 Ios 自动化(在 appium java-client 中有 MobileBy.ByIosUIAutomation),但现在 UI 自动化被 XCUITest 取代。
我发现,ios 谓词可用于查找 XCUI 元素(Appium java-client 5.0.0 中的 MobileBy.ByIosNsPredicate)。
我的问题是如何使用 ios 谓词查找元素?
在这里,我找到了 UIAutomation 的规则:http : //appium.readthedocs.io/en/stable/en/writing-running-appium/ios_predicate/#appium-predicate-helpers。例如,这里是 xpath 的 ios 谓词等价物:
ios谓词:tableViews()[1].cells().firstWithPredicate("label == 'Olivia'")
xpath : /UIATableView[2]/UIATableCell[@label = 'Olivia'][1]
我应该为这样的 xpath 使用什么 ios 谓词: //XCUIElementTypeCell/XCUIElementTypeStaticText[3]?
我正在尝试从 Yahoo Finance 导入 Google 表格中的股票实时价格、实时交易量和平均交易量,但不确定 XPath 是否用于相同的用途。
例如,对于 URL
https://sg.finance.yahoo.com/quote/AMZN
under summary tab:
realtime price: 1910.21
volume: https://sg.finance.yahoo.com/quote/AMZN
avg. volume: 4,406,091
Run Code Online (Sandbox Code Playgroud)
在这里我尝试修改下面的代码但不确定 XPath
=INDEX(IMPORTXML("https://sg.finance.yahoo.com/quote/AMZN","//div[@id='quote-header-info']/div[last()]/div[1]"),1)
Run Code Online (Sandbox Code Playgroud) 我想提取我尝试过的所有<li>元素文本<ul>
elem = driver.find_elements_by_xpath(("//div[@class='left width50']/p/b/ul"))
len(elem)
Run Code Online (Sandbox Code Playgroud)
给出 '0' 或空列表。
这是 html 源代码
<div class="left width50">
<p><b>Features:</b></p>
<ul>
<li>Easy spray application</li>
<li>Excellent bonding properties</li>
<li>Single package</li>
<li>Mixed with clean potable water at job site</li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
这里是网站的链接
有什么建议怎么办?
我不知道从哪里获取最后一个定位器 div
我尝试按Get Element Countin计算元素,div但它只有 1
示例 html
<div class="add-product"
<p data-aura-rendered-by="188:14729;a">
<span data-aura-rendered-by="191:14729;a">01-January</span>
<p data-aura-rendered-by="195:14729;a">
<span data-aura-rendered-by="198:14729;a">02-February</span>
<p data-aura-rendered-by="230:14729;a">
<span data-aura-rendered-by="233:14729;a">07-July</span>
</p>
</div>
Run Code Online (Sandbox Code Playgroud)
我需要div在div(7 月 7 日)计算所有元素或获取最后一个位置,但每次div包含不同数量的元素(这取决于测试数据)。
在 Xquery 3.1 中,我正在处理表单中的可变参数以搜索匹配的 XML 文档。XML 文档如下所示:
<listBibl xml:id="TC0001" type="collection">
<bibl>
<title type="collection">Bonum universale de apibus</title>
<affiliation corresp="dominican"/>
<author nymRef="thomas_cantipratensis"/>
<location corresp="flanders"/>
<othercontent>....</othercontent>
</bibl>
</listBibl>
Run Code Online (Sandbox Code Playgroud)
用户可以针对、、和提交可选参数xml:id,它们可以是具有多个值(序列)的参数。affiliationauthorlocation
如果用户要提交所有参数,则查询可能如下所示:
for $c in $mycollection//listBibl[@xml:id=($params_id)]
where $c/affiliation[@corresp=($params_affil)]
and $c/author[@nymRef=($params_author)]
and $c/location[@corresp=($params_location)]
return $c
Run Code Online (Sandbox Code Playgroud)
但是用户可以将某些参数留空,从而有效地使每个where语句都是可选的。
我目前可以组合在一起的唯一解决方案是使用一系列if...then...else语句来解释参数的每个排列。
在 Xpath 或 Xquery 中是否有任何方法来解释参数为空的wildcard情况?在伪代码中, where*代表一个想要的通配符:
where $c/affiliation[if ($params_affil)
then @corresp=($params_affil)
else @corresp=* ]
Run Code Online (Sandbox Code Playgroud)
非常感谢。