要获得<Container>
<Address></Address>
<DisplayName>This is the text we are looking for</DisplayName>
<Phone>888-888-8888</Phone>
<UrlName>Really want this text</UrlName>
</Container>
<Container>
<Address></Address>
<DisplayName>This is the text we dont want</DisplayName>
<Phone>888-888-8888</Phone>
<UrlName>Not Interested</UrlName>
</Container>
,它就像:
// h1 = This is the text we are looking for
var h1 = document.querySelector("h1").textContent;
$.ajax({
type: "GET",
url: "http://www.example.com/api",
dataType: "xml",
success: function(xml){
var container = $(xml).find('Container').find('DisplayName');
var urlName = $(container).find(h1).closest('Container').find('UrlName').text();
console.log(urlName);
},
error: function() {
console.log("error");
}
});
或
ZoneId
为什么不存在ZoneId.of("America/Sao_Paulo");
这样的值,例如:
ZoneId.of(ZoneId.SHORT_IDS.get("BET"));
这似乎不容易出错,而且更加自动完成友好?
答案 0 :(得分:14)
我相信它是因为无论Java版本如何,所有可能的时区名称列表都会发生变化。
时区信息comes with Java installation(通常位于文件夹<java-home>/lib/zi
或新版本的jre/lib/tzdb.dat
文件中)。但是这些信息可以在不更改Java版本的情况下进行更新(使用Timezone Updater Tool)。
如果更新了时区数据(但Java版本保持不变)并且创建了新的区域ID,则不会有相应的Enum
,而API&#34;不完整&#34;。时区数据changes faster than JDK updates - 即使它没有,但我们并不总是能够在生产环境中更新JDK版本。
我不能代表API创建者,但我认为他们决定让它保持原样,因为命名空间的增长速度可能比更新JDK的速度快,并且保持枚举的最新状态将是无休止的,总是不完整的工作。
如果您确实想检查时区名称是否有效,可以执行以下操作:
if (ZoneId.getAvailableZoneIds().contains("America/Sao_Paulo")) {
// America/Sao_Paulo is a valid ID
}
或者只需致电ZoneId.of("zone-name")
并抓住ZoneRulesException
。
我刚刚在 JDK 1.8.0_131 中调用了ZoneId.getAvailableZoneIds()
,它有600个条目。可能没有人想创建600枚枚举常量。
有人可能会争辩说,他们可以做类似于java.util.Locale
类的事情,它有一些语言的条目(如英语,德语,法语等)。但是如何决定哪些时区&#34;值得拥有&#34;一个常数?也许他们只是决定不考虑太多,&#34;嘿,忘掉它,只需使用带有区域名称的String
&#34; 。
另一个可能的原因可能是ZoneId.of()
方法还设计为接收UTC偏移(例如+05:00
,-0300
,+09:30:15
等等。由于偏移量接受小时,分钟和秒,因此有数百种可能的偏移量,并且为每个偏移量创建枚举将是不切实际的。
再次,人们可以争辩&#34;嘿,只创建名称的枚举并忘记偏移&#34; 。但是上面已经讨论了不创建枚举名称的可能的原因。
答案 1 :(得分:6)
JDK中的时区集合可以是completely replaced。
因此,无法为区域定义enum
。
此外,时区标识符相对不稳定。它们被重命名,合并并且通常会更改。 (包括我在内的各种人都试图在IANA数据库中获得更多稳定性,但数据库维护者并不同意。)
将考虑在提供常量的ThreeTen-Extra中创建ZoneIds
类的拉取请求。
答案 2 :(得分:4)
如果您看到ZoneId#getAvailableZoneIds方法的说明,那么您知道为什么吗?
此集包括所有可用的基于区域的ID的字符串形式。返回集中的基于偏移的区域ID 不包括。可以将ID传递给
of(String)
以创建ZoneId。区域ID的集合可以随着时间的推移增加,但在典型的应用程序中,ID的集合是固定的。每次调用此方法都是线程安全的。