0

我使用 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)——这总是会评估为,false因为来自 XML 的值是一个字符串,“1”。因此,我在 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中哪些字段是数字的标准/正确方法是什么?

4

1 回答 1

1

您可以使用isNaN()来检测字符串是否为数字。例如isNaN("5043")返回 false 表示“5043”可以解析为数字。然后,只需用于parseInt()比较值。例如:


if (parseInt(someValueFromTheXML, 10) === 1) {
 ...
}

另一种方法是使用 == 运算符的松散比较,以便 "1" == 1 评估为真。但是,最好改用第一个建议。由于 XML/HTML 属性始终是字符串,因此实际上没有其他方法可以解决此问题。

于 2013-08-09T01:12:01.440 回答