我想通过xpath从xml中提取一个值,而且我有点挣扎。这是我必须使用的
的xml示例<data>
<menu>
<date>2017-10-30</date>
<type>S</type>
<name>onion soup</name>
</menu>
<menu>
<date>2017-10-30</date>
<type>L</type>
<name>ham sandwich</name>
</menu>
<menu>
<date>2017-10-31</date>
<type>S</type>
<name>pumpkin soup</name>
</menu>
<menu>
<date>2017-10-31</date>
<type>L</type>
<name>cheese sandwich</name>
</menu>
<menu>
<date>2017-11-1</date>
<type>S</type>
<name>sweet potato soup</name>
</menu>
<menu>
<date>2017-11-1</date>
<type>L</type>
<name>chicken sandwich</name>
</menu>
</data>
日期和膳食名称动态变化。
现在我有两列,今天的汤和明天的。我知道如何通过xpath链接到xml今天的汤:
/data/menu/name[../type/text() = "S"]
或/data/menu[type[text()='S']]/name
但是由于我的xml Feed没有任何属性可以区分,但我在明天会遇到困难,两个日期的类型都是相同的,日期也在不断变化。
感谢您的帮助。
编辑:
感谢您的光临。
我认为我说错了。
我应该指出,我在其中一个本地软件中使用了Xpath内置功能。</ p>
你是对的,这些行
/data/menu[type='S' and date='2017-10-31']]/name
适用于所有的汤,我只是错误地描述了它在我的行为方面的表现,它给了我第一个的价值。
/data/menu[type='S' and date='2017-11-01']]/name
会给我Tommorow的汤,但如果我想在静态栏中使用输出这个值,那么Tommorow的汤&#34;我希望我的xpath输出旁边只有一天是真的。我需要的是它也适用于未来几天。
我需要一条可以给我&#34; tommorow汤&#34;今天假设是南瓜汤,tommorow当xml更新它将是甘薯汤,并且在那之后它将是一些新的汤,将在稍后用整个xml更新。
如果我使用
/data/menu[type='S' and date='2017-10-30']]/name
它不会显示任何东西,因为它不会是2017-10-30因为xml会更新并将从2017-10-31开始。
我希望现在我的问题更加清晰。我知道它仍然令我感到困惑,因此我很难用英语来形容它,特别是因为我是Xath的初学者。
答案 0 :(得分:1)
如何区分没有属性的元素?使用其他元素......
但首先要澄清一个错误的假设:
现在我有2列,今天的汤和明天的。我知道怎么做 通过xpath链接到xml今天的汤:
/data/menu/name[../type/text() = "S"]
或/data/menu[type[text()='S']]/name
实际上,你说的XPaths会给你今天的汤,实际上会给你所有汤,而不管date
。
XPath 1.0没有日期函数 1 ,因此您必须将当前日期和明天的日期传递到XPAth,并且您可以自己测试date
element的值为字符串:
如果今天是2017年10月31日,那么此XPath将为您提供今天的汤的name
,
/data/menu[type='S' and date='2017-10-31']]/name
并且此XPath将为您提供明天的汤的name
:
/data/menu[type='S' and date='2017-11-1']]/name
1
XPath 2.0和3.0的dynamic context包含current-dateTime()
函数,但其格式为implementation-dependent,这限制了它的用途。您可以使用日期计算来确定明天的日期,但除非您希望依赖于current-dateTime()
的实现定义格式,否则至少必须立即通过XPath。