虽然我通过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
当你说“更好”时,你的标准是什么?您是在追求性能,可读性,还是在寻找能够在页面内容稍有变化的情况下仍然有效的表达式?
可能是您的其他尝试失败的主要原因是名称空间。如果XPath表达式中有名称,则本地名称和名称空间URI都需要与源文档中的名称匹配。前缀绑定到命名空间以执行XPath的方式取决于您正在使用的XPath API,并且有些人发现使用*[local-name()='xyz']/*[local-name()='abc']
形式的构造来忽略命名空间更方便。在XPath 2.0中,您可以编写/*:xyz/*:abc
,但我想如果您使用XPath 2.0,您可能会这么说。