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

5

我在使用一个函数将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文件时,这是一个常见的问题。

提前感谢您的任何帮助。


你能告诉我们在转储t.BaseLineColor时得到了什么吗?我很好奇为什么生成的错误包含XML版本头文本。writeDump(t.BaseLineColor); - Miguel-F
3
错误可能是因为您试图在XML节点上执行数学函数,而XML节点是一个复杂对象。写入 toString(t.BaseLineColor),您会发现它是一个XML字符串,而不是数字255。您需要获取节点的文本值,这是一个简单的值。请尝试使用t.xmlText代替。 - SOS
更正:请尝试使用t.BaseLineColor.xmlText - SOS
我有一个问题,能否提供一个XML数据的示例? - James A Mohler
1个回答

2
错误信息是正确的。代码试图在不是数字的东西上执行数学操作,尽管它在浏览器中可能看起来像一个数字... 你可能会被浏览器处理基于标签的代码(如xml)所迷惑。
此代码(错误地)将 t.BaseLineColor 的值显示为简单数字 255。
<cfscript>
    t = xmlParse('<?xml version="1.0" encoding="UTF-8"?><BaseLineColor>255</BaseLineColor>');
    writeOutput(t.BaseLineColor);
</cfscript>

可运行示例

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

检查元素结果

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

XML节点的WriteDump

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

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

可运行示例


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接