我使用jQuery发布ajax请求,并使用PHP构建XML响应。一切都很好,但我想知道我用于数据键入的方法,以及是否有更标准或更正确的方法。我的XML通常是这样的,其中一些属性表示文本,另一些属性表示数字数据:
<UnitConversions>
<UnitConversion basicUnitName="mile" conversionFactor="5280" conversionUnit="foot"/>
<UnitConversion basicUnitName="mile" conversionFactor="1760" conversionUnit="yard"/>
</UnitConversions>
我有很多不同的对象,而不仅仅是这一种类型,所以在我的构造函数中,我不是显式初始化每个属性,而是从XML节点复制属性:
var UnitConverter = function(inUnitConversionNode) {
var that = this;
$.each(inUnitConversionNode.attributes, function(i, attribute) {
that[attribute.name] = attribute.value;
});
};
我在早期检查数值时遇到了问题,比如在if(someValueFromTheXML === 1)
中——由于XML中的值是一个字符串"1",所以它总是计算为false
。因此,我在XML的关键位置添加了节点,告诉我的客户端代码什么要解释为数字,什么要保留为文本:
<UnitConversions>
<NumericFields>
<NumericField fieldName="conversionFactor"/>
</NumericFields>
<UnitConversion basicUnitName="mile" conversionFactor="5280" conversionUnit="foot"/>
<UnitConversion basicUnitName="mile" conversionFactor="1760" conversionUnit="yard"/>
</UnitConversions>
所以现在我将NumericFields节点传递到构造函数中,这样它就知道哪些字段要存储为实际数字。
这一切都很好,但这似乎是一个有点天真的解决方案,甚至可能是一个黑客。似乎还有更复杂的东西。这个问题似乎与XML模式有关,但我的谷歌搜索似乎表明,模式更多的是关于验证,而不是键入,而且它们似乎无论如何都是面向服务器端处理的。
js知道XML中哪些字段是数字字段的标准/正确方法是什么?
您可以使用isNaN()
来检测字符串是否为数字。例如,isNaN("5043")
返回false,表示"5043"可以解析为数字。然后,只需使用parseInt()
来比较该值。例如:
if (parseInt(someValueFromTheXML, 10) === 1) {
...
}
另一种方法是使用与==运算符的松散比较,以便"1"==1的计算结果为true。然而,最好使用第一个建议。实际上没有其他方法可以实现这一点,因为XML/HTML属性总是字符串。