我爱编程

XML数据转换JSON

2017-07-27  本文已影响33人  codeSirCao

xml

<?xml version="1.0" encoding="UTF-8"?>
 <recipe>
    <Persion>
        <name>李四</name>
       <sex>男</sex>
       <age>28</age>
        <birth>
           <year>1980</year>
           <month>2</month>
          <day>22</day>
       </birth>
   </Persion>
</recipe>

通过AJAX请求 原声responseText属性可以直接获取标签中的数据但是不容易操作
responseXML获取xml格式 通过类似DOM操作转换成JSON对象

<script>
    var XMLhttp=new XMLHttpRequest()
      XMLhttp.onreadystatechange=function(){
       if(XMLhttp.readyState==4&&XMLhttp.status==200){
            // console.log(XMLhttp.response)
            let arr=XMLhttp.responseXML.documentElement
            // console.log(arr.getElementsByTagName("name"))
           let arr1=arr.getElementsByTagName("Persion")[0]
           var arrr={}
            for (var i = 0; i < arr1.children.length; i++) {
               // arrr
               if(arr1.children[i].tagName!="birth"){
                    arrr[arr1.children[i].tagName]=arr1.children[i].innerHTML
                   console.log(arr1.children[i].tagName) 
               }else{
                  console.log(arr1.children[i].children.length)
                    var birth={};
                    for (var j = 0; j <arr1.children[i].children.length; j++) {
                         birth[arr1.children[i].children[j].tagName]=arr1.children[i].children[j].innerHTML
                    }
                    arrr.birth=birth
               }
        };
        console.log(arrr)
      }
 }
 XMLhttp.open("get","/data.xml",true)
 XMLhttp.send()

</script>

文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

 <!DOCTYPE 根元素 [元素声明]>

通过 DTD,您的每一个 XML 文件均可携带一个有关其自身格式的描述。
通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。
而您的应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。
您还可以使用 DTD 来验证您自身的数据。

问题的出现:XML的元素名字是不固定的,当两个不同的文档使用同样的名称描述两个不同类型的元素的时候,或者一个同样的标记表示两个不同含义的内容的时候,就会发生命名冲突。
问题的解决:命名空间(Namespace),对于每一套特定应用的DTD,给它一个独一无二的标志来代表,如果在XML中使用DTD中定义的元素,需将DTD的标志和元素名,属性连在一起使用,相当于指明了元素来自什么地方,这样就不会同其他同名元素混淆了(有点类似Java中包的作用,给它取个全名)。在XML中,采用现成的,在全球范围唯一的“域名”作为Namespace,即URL作为XML的Namespace。
命名空间允许我们在一个文档中结合不同的元素和属性定义,并指明这些元素和属性的定义来自那里。
命名空间的语法如下:
xmlns:[prefix]=”[url of name]”
其中“xmlns:”是必须的属性。“prefix”是命名空间的别名,它的值不能为xml。
<sample xmlns:ins=”http://www.lsmx.net.ac”>
<ins:batch-list>
<ins:batch>Evening Batch</ins:batch>
</ins:batch-list>
</sample>
值得注意的是batch-list,batch等标记必须在"http://www.lsmx.net.ac"中定义,别名为ins。注意在使用前必须先声明命名空间,在使用时别忘了“:”。
一,默认Namespace xmlns=”[url of namespace]”
二,指定了父元素的命名空间,子元素希望用自己的命名空间,可以在子元素中指定命名空间的别名。
三,属性也可以有自己的命名空间。

今天只是一时兴起简单粗暴写了一下有时间本人会好好更新代码 与命名

上一篇 下一篇

猜你喜欢

热点阅读