javascript - 如何将 XML 等文本解析为 javascript 对象

标签 javascript xml json parsing text-parsing

我创建了一个函数来执行此操作。

var text="adsf [name]Victor[/name] dummytext [name]Elliot[/name] asdf [name]Jake[/name] asdf [foo]bar[/foo]";

alert( readTags(text,'name') ); //Victor,Elliot,Jake
alert( readTags(text,'foo') ); //bar

但现在我想实现一个接收这样的字符串的函数

[person]
    [name]jake[/name]
    [age]12[/age]
[/person]

并返回一个像这样的对象

var object={};
object['person']={};
object['name']='jake';
object['age']='12';
return(object);

但我不知道如何循环文本。如何处理开始和结束标签? 喜欢

[tag] [tag]value[/tag] [/tag]

我想使用 indexOf('[tag]')lastindexOf('[/tag]') 从左侧查找起始标记,从右侧查找结束标记

但在这种情况下不起作用

[tag]value[/tag] [tag]value[/tag]

这是之前的函数

function readTags(str,property){

    var beginTag='['+property+']';
    var endTag='[/'+property+']';

    var values=new Array(0);

    while(str.indexOf(beginTag)!=-1){
        values[values.length]=strBetween(str,beginTag,endTag);
        str=str.substring(str.indexOf(endTag)+endTag.length);
    }
    return(values);
}

function strBetween(string,strBegin,strEnd){    //StrBetween("abcdef","b","e")  //return "cd"

    var posBegin, posEnd;

    posBegin=string.indexOf(strBegin);
    string=string.substring(posBegin + strBegin.length);
    posEnd=string.indexOf(strEnd);
    string=string.substring(0,posEnd);

    if ((posBegin==-1)||(posEnd==-1)){
        return(null);
    }else{
        return(string);
    }
}

最佳答案

除非您有充分的理由使用 JSON ,不要这样做。 JSON 很好地处理了所有这些问题,并且可以很容易地从服务器到客户端,反之亦然。

但是由于这看起来很有趣,我会尝试看看是否可以找到答案。

<小时/>

由于您的结构类似于 XML,因此只需将括号替换为 <>并像 XML 一样解析它:

text = text.replace('[', '<').replace(']', '>');

if (typeof DOMParser != "undefined") {
  var parser = new DOMParser();
  var xml = parser.parseFromString(text, 'text/xml');
} else {
  var xml = new ActiveXObject('Microsoft.XMLDOM');
  xml.async = 'false';
  xml.loadXML(text); 
}

现在xml持有DOMDocument您可以解析:

xml.getElementsByTagName('person').childnodes;
<小时/>

尝试这个可能有效的代码(未测试):

function createObject(element) {
  var object = {};

  if (element.childNodes.length > 0) {
    for (child in element.childnodes) {
      object[element.tagName] = createObject(child);
    }

    return object;
  } else {
    return element.nodeValue;
  }
}

关于javascript - 如何将 XML 等文本解析为 javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8109576/

相关文章:

javascript - 为什么我的带有 JSONP 脚本的 PHP/AJAX 返回 HTML、JSON 和无效的 JSON?

javascript - Bootstrap 嵌套选项卡在重新选择之前不会显示

javascript - Canvas - 贝塞尔曲线重复

xml - 如何将源代码转换为 ast 的基于 xml 的表示形式?

java - Apache XmlBeans NullPointerException

json - 如何检查名称是否已经存在? Azure 资源管理器模板

javascript - 动态html生成div id麻烦

javascript - 使用合金 Backbone 模型的参数保存模型

c# - xmlreader,获取属性的名称

android - 致命异常 : c. a.c.u java.lang.IllegalStateException:预期为 int,但在第 1 行第 83 列为 BOOLEAN