微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 ColdFusion 中将 XML 数组文本项转换为数字?

如何解决如何在 ColdFusion 中将 XML 数组文本项转换为数字?

我在使用函数将 XML 数据转换为适当的数据类型时遇到问题。 我已经使用 XmlParse() 读入了一个 XML 文件。 其中有一个我循环的数组。 <cfloop array=#i.Task# index="t"> 我的理解是这个数组中的项目是 XML 文本。我可以用 CFoutput 显示所有项目没问题。数组 (BaseLineColor) 中的一项是颜色。 #t.BaseLineColor# 但是这个颜色值是一个不同长度的十进制整数。我已经计算出将这个十进制数转换为 R、G、B 十进制值的数学方法。到目前为止一切都很好。 问题是,如果我在 BaseLineColor 上尝试数学函数,那么我得到:

值 ?xml version="1.0" encoding="UTF-8"? BaseLineColor 255 /BaseLineColor 不能转换为数字。

好吧,我尝试了几种方法来尝试将 BaseLineColor 转换为整数,但没有任何效果。 Val() 不起作用。事实上,我似乎无法将其转换为任何数据类型。 例如,这是我试图将其设为字符串 - 同样的错误

 <cfscript>
            Strbaselinecolor=toString(t.BaseLineColor);
            rdec=floor(Strbaselinecolor / 65536);
            gdec=floor((Srtbaselinecolor - rdec * 65536)/256);
            bdec=floor(Strbaselinecolor - rdec * 65536 - gdec * 256);
            writeOutput("#t.baselinecolor#: #Strbaselinecolor# red #rdec#,green #gdec#,blue #bdec#")
</cfscript>

我应该使用什么功能?在将其中一些值称为整数之前,我是否应该以某种方式对 XML 进行预处理?

XML 数据中有很多值是数字(一些整数和一些浮点数),因此不仅仅是这些是颜色的项目,而是使用任何非颜色的 XML 数据的更普遍的问题文本。我试图找到一些关于此的参考资料,但到目前为止还没有找到任何相关的内容。但我猜这是读取 XML 文件时的常见问题。

在此先感谢您的帮助。

解决方法

错误信息是正确的。代码正在尝试对不是数字的东西执行数学运算,尽管事实上它可能看起来在浏览器中是一个......你可能会被浏览器处理标签的方式绊倒基于 xml 的代码。

此代码(错误地)将 t.BaseLineColor 的值显示为简单数字 255

<cfscript>
    t = xmlParse('<?xml version="1.0" encoding="UTF-8"?><BaseLineColor>255</BaseLineColor>');
    writeOutput(t.BaseLineColor);
</cfscript>

Runnable Example

然而,使用浏览器的“检查元素”工具,显示该值实际上是一个 xml 字符串。由于浏览器将 <> 中包含的任何内容视为 html 标签,这些标签不会被呈现,因此屏幕上只能看到数字 255

Inspect Element Result

writeDump() 在这里更有帮助。它将 t.BaseLineColor 显示为一个 xml 节点,它的值可以通过 xmlText 属性访问。

WriteDump of XML Node

这个简单的值可以用于数学运算。

<cfscript>
    t = xmlParse('<?xml version="1.0" encoding="UTF-8"?><BaseLineColor>255</BaseLineColor>');
    result = t.BaseLineColor.xmlText  / 65536 ;
    writeOutput( result );
</cfscript>

Runnable Example

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。