当* // ... / @ NODE不起作用时,是否有比* / * / * / * / * [12]更好的XPATH语法?

问题描述 投票:2回答:1

虽然我通过XPATH成功获得(US)PMMS 30Y固定抵押贷款利率,但我在获得(美国)联邦曲线收益率方面并不成功。这些XML数据集使一个工作而不是另一个工作有什么不同?

我尝试了很多变化,唯一适用于此数据集的变体是使用一些*/*/*/*系列和数组限定符[12]

此数据集中元素的总count(*//)为180。

我正在使用Google表格IMPORTXML(url,xpath)来执行此操作。

这个工作

=IMPORTXML("https://www.treasury.gov/resource-center/data-chart-center/interest-rates/pages/XmlView.aspx?data=yield","*/*/*/*/*[12]")

这不是

=IMPORTXML("https://www.treasury.gov/resource-center/data-chart-center/interest-rates/pages/XmlView.aspx?data=yield","*//d:BC_10YEAR")

或者其中任何一个

*//*@d:BC_10YEAR
*//@d:BC_10YEAR
*//d:BC_10YEAR[1]
*//m:properties[@d:BC_10YEAR]
*//*m:properties[@d:BC_10YEAR]

还有很多其他的变化 - 我想我已经尝试了所有这些变化,但显然有些东西在逃避我。

理想的结果是专门获得最新的BC_10YEAR,即截止日期,根据数据集(2019-04-09T20:36:32Z)为2.49。

<d:BC_10YEAR m:type="Edm.Double">2.49</d:BC_10YEAR>

数据集编码的URL

美国财政部:https://data.treasury.gov/feed.svc/DailyTreasuryYieldCurveRateData?$filter=month(NEW_DATE)%20eq%204%20and%20year(NEW_DATE)%20eq%202019

FREDDIE MAC http://www.freddiemac.com/pmms/pmmsthin.html

使用XPATH查询:

http://www.freddiemac.com/pmms/pmmsthin.html        IMPORTXML(url,xpath)
==========================================================================  
XPATH   //th[contains(text(),"30YR")]//..//td[1]    4.08    <== 30YR FMR
XPATH   //th[contains(text(),"30YR")]//..//td[2]    0.5     <== 30YR Fees & Points
xml xpath
1个回答
0
投票

当你说“更好”时,你的标准是什么?您是在追求性能,可读性,还是在寻找能够在页面内容稍有变化的情况下仍然有效的表达式?

可能是您的其他尝试失败的主要原因是名称空间。如果XPath表达式中有名称,则本地名称和名称空间URI都需要与源文档中的名称匹配。前缀绑定到命名空间以执行XPath的方式取决于您正在使用的XPath API,并且有些人发现使用*[local-name()='xyz']/*[local-name()='abc']形式的构造来忽略命名空间更方便。在XPath 2.0中,您可以编写/*:xyz/*:abc,但我想如果您使用XPath 2.0,您可能会这么说。

© www.soinside.com 2019 - 2024. All rights reserved.