【问题标题】:How do I store xml as a string variable in javascript?如何在 javascript 中将 xml 存储为字符串变量?
【发布时间】:2012-10-03 04:42:03
【问题描述】:

我试图将一段 xml 存储到 javascript 中的字符串变量中,而在 IE8 中它不断抛出错误。 FireFox 不会显示错误,但在 IE8 中它当然会显示。切换浏览器不是一种选择,所以我必须尝试解决这个问题。

该函数的目的是检查一个列表的项目是否存在于一个xml对象中。因此,如果有更好的方法来进行检查,我也对此持开放态度。我们从中提取的系统具有将 xml 转换为字符串的功能。底部是检索内容的输出。这是功能。

function commodityExists(newCommodityCode){
        var comExists = new Boolean(0);
        newCommodityCode =  ">" + newCommodityCode + "<"
        var strXML = 'tw.local.aribaHeader.commodities.toXMLString()';  //ERROR HERE
        strXML = strXML.toString();
        if(strXML.indexOf(newCommodityCode,0)>0){            
            comExists=true;            
        }
        return comExists;
    };  

这是 strXML.toString() 的输出;但正如你所见,它本质上是 xml。

        var strXML = ‘<variable type="NameValuePair[]">
                      <item type="NameValuePair">
                      <name type="String"><![CDATA[No Data Found]]></name>
                      <value type="String"><![CDATA[95990070]]></value>
                      </item>
                      </variable>’;

【问题讨论】:

  • 另外,我不会将new Boolean(0) 用于falseif(new Boolean(0)) console.log('a'); 将记录“a”。换句话说,包裹falseBoolean 对象是truthy
  • 此外,此代码还有其他令人担忧的问题。它几乎看起来像一个面试问题或家庭作业问题。 “下面的代码有多少问题?”无意冒犯,但正如其他人提到的那样,您指出 can't 会引发错误。
  • 感谢大家的反馈。我们正在使用带有自定义 UI 的 IBM 的 Lombardi Websphere,因此我们从 bpms 服务器中提取 xml,因此在无法解释环境的情况下很难将这个问题翻译给每个人。例如,str 变量的实际代码是 ar strXML = '';因为它实际上是在插入一个服务器变量。其他一些东西,比如我在调试时使用的布尔变量,所以我完全同意。
  • 对于 newCommodityCode 我在字符串中添加括号,这样我正在搜索一个完整的字符串......所以搜索 >12351236
  • 现在我们正在取得进展。我的猜测是它与toXMLString 返回的字符串有关。乍一看,它看起来像是一个换行问题,因为您在 strXML 字符串中显示换行符,这在 JavaScript 中是不允许的(不以反斜杠结束每一行)。但是,它在 Firefox 上和在 IE 上一样不允许,所以如果是这种情况,它也不应该在 Firefox 上工作。您能否发布浏览器从服务器接收的原始 JavaScript 输出?

标签: javascript xml string


【解决方案1】:

我不知道你认为代码在做什么,这里解释一下它的作用:

> function commodityExists(newCommodityCode){
>     var comExists = new Boolean(0);

你真的想要一个布尔对象吗?此函数可能会返回一个布尔对象或原语,具体取决于稍后发生的情况。考虑:

      var comExists = false;

.

>     newCommodityCode =  ">" + newCommodityCode + "<"

这会覆盖调用中传递给 newCommodityCode 的任何值。

>     var strXML = 'tw.local.aribaHeader.commodities.toXMLString()';  //ERROR HERE

我看不出这是如何引发错误的,这是一个简单的字符串赋值。

>     strXML = strXML.toString();

这实际上什么都不做 - 它调用字符串的 toString 方法,它只会返回相同的字符串。

>     if(strXML.indexOf(newCommodityCode,0)>0){            

该测试将始终为假,因为 nweCommodityCode 的值在函数中是硬编码的,并且不存在于 strXML 的(硬编码)值中。

>         comExists = true;            
>     }
>     return comExists; };

该函数将始终返回 false(尽管原始函数将返回值为 false 的布尔对象)。

【讨论】:

  • toXMLString 只是 WLE 语法的一部分,它将返回一个 XML 对象,但它显然不是一个实际的字符串。它是一个 xml 对象。经过这里的讨论之后,在我看来,我的方法确实行不通,所以我将回到这个绘图板上。我会结束这个问题。再次感谢你们的反馈。我担心可能是这种情况......我只是希望那里有一些我不知道的惊人物品。谢谢大家!
【解决方案2】:

你正在创建一个字符串:

var strXML = 'tw.local.aribaHeader.commodities.toXMLString()';  //ERROR HERE
             ^---                                           ^---

然后将该字符串转换为...字符串?

strXML = strXML.toString();

这个tw 对象将在哪里定义,您似乎正在尝试使用?因为现在编写代码时,您没有在此 tw 对象中调用 .toXMLString() 方法。您只是将对象调用的文字文本分配为字符串本身。

【讨论】:

  • 你可以把整行想象成一大段 xml 代码......
  • 然后我需要把它变成一个字符串,这样我就可以使用 indexOf 函数,这就是为什么我使用 strXML.toString() 我得到的错误是“未终止的字符串常量”...这让我相信将 xml 存储到 strXML 变量中有问题。
  • 刚找到这个...stackoverflow.com/questions/5125506/… 所以我要结束这个问题。
【解决方案3】:

我尝试采用的方法行不通,因为我正在动态填充 xml,所以我无法逃避字符(可能有某种方式,但显然不值得)。 Storing HTML or XML code in javascript variables

相反,我将比较移动到服务器端,而不是检索 xml 并在客户端进行比较并通过 ajax 发回结果,除非有人有更好的建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    相关资源
    最近更新 更多