【问题标题】:How to convert XML array text items into numbers in ColdFusion?如何在 ColdFusion 中将 XML 数组文本项转换为数字?
【发布时间】:2021-07-14 06:39:41
【问题描述】:

我在使用函数将 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);
  • 这些错误可能是因为您试图在一个复杂对象的 xml 节点上执行数学函数。 WriteDump toString(t.BaseLineColor) 你会看到它是一个 xml 字符串——而不是数字 255。你想要节点的文本,这是一个简单的值。请改用t.xmlText
  • 更正:改用t.BaseLineColor.xmlText
  • 我有疑问有一个 XML 数据的例子。

标签: arrays xml coldfusion


【解决方案1】:

错误信息是正确的。该代码正在尝试对不是数字的事物执行数学运算,尽管它可能似乎在浏览器中是一个......您可能会被浏览器处理标签的方式绊倒基于xml的代码。

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

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

Runnable Example

但是,使用浏览器的“检查元素”工具,显示该值实际上是一个 xml 字符串。由于浏览器将 &lt;&gt; 中包含的任何内容视为 html 标记,它们不会被渲染,因此只有数字 255 在屏幕上可见。

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

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

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

Runnable Example

【讨论】:

    猜你喜欢
    • 2011-02-21
    • 2023-03-27
    • 2015-05-06
    • 1970-01-01
    • 2020-12-13
    • 2011-09-28
    • 1970-01-01
    相关资源
    最近更新 更多