1
+ /**
2
+ * Created by Administrator on 2017/10/13.
3
+ */
4
+ /**
5
+ * 实现js解析xml文件的功能,包含2种方式:
6
+ * 1:读取本地xml文件或xml格式字符串,解析xml内容
7
+ * 2:ajax获取服务器xml文件,采用文件或字符串的方式解析xml
8
+ *
9
+ * 测试示例数据:
10
+ * <?xml version="1.0" encoding="utf-8" ?>
11
+ * <DongFang>
12
+ * <Company>
13
+ * <cNname>1</cNname>
14
+ * <cIP>1</cIP>
15
+ * </Company>
16
+ * <Company>
17
+ * <cNname>2</cNname>
18
+ * <cIP>2</cIP>
19
+ * </Company>
20
+ * <Company>
21
+ * <cNname>3</cNname>
22
+ * <cIP>3</cIP>
23
+ * </Company>
24
+ * <Company>
25
+ * <cNname>4</cNname>
26
+ * <cIP>4</cIP>
27
+ * </Company>
28
+ * <Company>
29
+ * <cNname>5</cNname>
30
+ * <cIP>5</cIP>
31
+ * </Company>
32
+ * <Company>
33
+ * <cNname>6</cNname>
34
+ * <cIP>6</cIP>
35
+ * </Company>
36
+ * </DongFang>
37
+ *
38
+ * @param xmlFilePath
39
+ * @returns {* }
40
+ */
41
+ //xmlFilePath xml文件路径
42
+ function loadXmlFile ( xmlFilePath ) {
43
+ var xmlDoc = null ;
44
+ //判断浏览器的类型
45
+ if ( ! ! window . ActiveXObject || "ActiveXObject" in window ) { //支持IE浏览器
46
+ var xmlDomVersions = [ 'MSXML.2.DOMDocument.6.0' , 'MSXML.2.DOMDocument.3.0' , 'Microsoft.XMLDOM' ] ;
47
+ for ( var i = 0 ; i < xmlDomVersions . length ; i ++ ) {
48
+ try {
49
+ xmlDoc = new ActiveXObject ( xmlDomVersions [ i ] ) ;
50
+ break ;
51
+ } catch ( e ) {
52
+ }
53
+ }
54
+ }
55
+ else if ( document . implementation && document . implementation . createDocument ) { //Firefox, Mozilla, Opera, etc
56
+ try {
57
+ /* document.implementation.createDocument('','',null); 方法的三个参数说明
58
+ * 第一个参数是包含文档所使用的命名空间URI的字符串;
59
+ * 第二个参数是包含文档根元素名称的字符串;
60
+ * 第三个参数是要创建的文档类型(也称为doctype)
61
+ */
62
+ xmlDoc = document . implementation . createDocument ( '' , '' , null ) ;
63
+ } catch ( e ) {
64
+ }
65
+ }
66
+ else {
67
+ return null ;
68
+ }
69
+
70
+ if ( xmlDoc != null ) {
71
+ try {
72
+ xmlDoc . async = false ;
73
+ xmlDoc . load ( xmlFilePath ) ; //chrome没有load方法
74
+ } catch ( e ) {
75
+ //针对Chrome,不过只能通过http访问,通过file协议访问会报错
76
+ var xmlhttp = new window . XMLHttpRequest ( ) ;
77
+ xmlhttp . open ( "GET" , xmlFilePath , false ) ;
78
+ xmlhttp . send ( null ) ;
79
+ if ( xmlhttp . readyState == 4 ) {
80
+ xmlDoc = xmlhttp . responseXML . documentElement ;
81
+ }
82
+ }
83
+ }
84
+
85
+ return xmlDoc ;
86
+ }
87
+ //读取xml 字符串
88
+ function loadXmlString ( xmlString ) {
89
+ var xmlDoc = null ;
90
+ //判断浏览器的类型
91
+ //支持IE浏览器
92
+ if ( ! ! window . ActiveXObject || "ActiveXObject" in window ) { //window.DOMParser 判断是否是非ie浏览器
93
+ var xmlDomVersions = [ 'MSXML.2.DOMDocument.6.0' , 'MSXML.2.DOMDocument.3.0' , 'Microsoft.XMLDOM' ] ;
94
+ for ( var i = 0 ; i < xmlDomVersions . length ; i ++ ) {
95
+ try {
96
+ xmlDoc = new ActiveXObject ( xmlDomVersions [ i ] ) ;
97
+ xmlDoc . async = false ;
98
+ xmlDoc . loadXML ( xmlString ) ; //loadXML方法载入xml字符串
99
+ break ;
100
+ } catch ( e ) {
101
+ }
102
+ }
103
+ }
104
+ else if ( window . DOMParser && document . implementation && document . implementation . createDocument ) { //支持Mozilla浏览器
105
+ try {
106
+ /* DOMParser 对象解析 XML 文本并返回一个 XML Document 对象。
107
+ * 要使用 DOMParser,使用不带参数的构造函数来实例化它,然后调用其 parseFromString() 方法
108
+ * parseFromString(text, contentType) 参数text:要解析的 XML 标记 参数contentType文本的内容类型
109
+ * 可能是 "text/xml" 、"application/xml" 或 "application/xhtml+xml" 中的一个。注意,不支持 "text/html"。
110
+ */
111
+ domParser = new DOMParser ( ) ;
112
+ xmlDoc = domParser . parseFromString ( xmlString , 'text/xml' ) ;
113
+ } catch ( e ) {
114
+ }
115
+ }
116
+ else {
117
+ return null ;
118
+ }
119
+
120
+ return xmlDoc ;
121
+ }
122
+
123
+ function getLocalXmlPath ( ) {
124
+ var host = window . location . host ;
125
+ var path = window . location . pathname ;
126
+ var webinfIndex = path . lastIndexOf ( "WEB-INF" ) ;
127
+ var xmlPath = path . substr ( 1 , webinfIndex - 1 ) . concat ( "WEB-INF/resource/testReadXml.xml" ) ;
128
+
129
+ return xmlPath = window . location . protocol + "//" + host + "/" + xmlPath ;
130
+ }
131
+
132
+ //读取本地xml文件,根据ajax设置的返回数据类型不同,以文件或字符串的形式解析返回的xml
133
+ function readXMLFile ( ) {
134
+ var xmlPath = getLocalXmlPath ( ) ;
135
+ //读取xmlfile
136
+ var xmlDoc = loadXmlFile ( xmlPath ) ;
137
+ var elements = xmlDoc . getElementsByTagName ( "Company" ) ;
138
+ for ( var i = 0 ; i < elements . length ; i ++ ) {
139
+ var name = elements [ i ] . getElementsByTagName ( "cNname" ) [ 0 ] . firstChild . nodeValue ;
140
+ var ip = elements [ i ] . getElementsByTagName ( "cIP" ) [ 0 ] . firstChild . nodeValue ;
141
+
142
+ alert ( "name=" + name + " ,ip=" + ip ) ;
143
+
144
+ break ;
145
+ }
146
+ }
147
+ function readXMLString ( ) {
148
+ //读取xml string
149
+ var xmlstring = '<?xml version="1.0" encoding="utf-8" ?><DongFang><Company><cNname>1</cNname><cIP>1</cIP></Company><Company><cNname>2</cNname><cIP>2</cIP></Company><Company><cNname>3</cNname><cIP>3</cIP></Company><Company><cNname>4</cNname><cIP>4</cIP></Company><Company><cNname>5</cNname><cIP>5</cIP></Company><Company><cNname>6</cNname><cIP>6</cIP></Company></DongFang>' ;
150
+ var xmlstringDoc = loadXmlString ( xmlstring ) ;
151
+ var elements_2 = xmlstringDoc . getElementsByTagName ( "Company" ) ;
152
+ for ( var i = 0 ; i < elements_2 . length ; i ++ ) {
153
+ var name = elements_2 [ i ] . getElementsByTagName ( "cNname" ) [ 0 ] . firstChild . nodeValue ;
154
+ var ip = elements_2 [ i ] . getElementsByTagName ( "cIP" ) [ 0 ] . firstChild . nodeValue ;
155
+
156
+ alert ( "name=" + name + " ,ip=" + ip ) ;
157
+
158
+ break ;
159
+ }
160
+ }
161
+
162
+ //ajax获取取本地xml文件,根据ajax设置的返回数据类型不同,以文件或字符串的形式解析返回的xml
163
+ function ajaxLoadXmlFile ( ) {
164
+ var xmlPath = getLocalXmlPath ( ) ;
165
+ $ . ajax ( {
166
+ url : "../resource/testReadXml.xml" ,
167
+ dataType : "xml" ,
168
+ type : "get" ,
169
+ success : function ( responseData ) {
170
+
171
+ $ ( responseData ) . find ( "Company" ) . each ( function ( i ) {
172
+ var name = $ ( this ) . children ( "cNname" ) . text ( ) ;
173
+ var ip = $ ( this ) . children ( "cIP" ) . text ( ) ;
174
+ alert ( "name=" + name + " ,ip=" + ip ) ;
175
+ return false ;
176
+ } ) ;
177
+ }
178
+ } ) ;
179
+ }
180
+ //ajax获取取本地xml文件,根据ajax设置的返回数据类型不同,以文件或字符串的形式解析返回的xml
181
+ function ajaxLoadXmlString ( ) {
182
+ var xmlPath = getLocalXmlPath ( ) ;
183
+ $ . ajax ( {
184
+ url : xmlPath ,
185
+ dataType :"text" ,
186
+ type :"get" ,
187
+ success : function ( responseData ) {
188
+ var xmlDoc = loadXmlString ( responseData ) ;
189
+ var elements_2 = xmlDoc . getElementsByTagName ( "Company" ) ;
190
+ for ( var i = 0 ; i < elements_2 . length ; i ++ ) {
191
+ var name = elements_2 [ i ] . getElementsByTagName ( "cNname" ) [ 0 ] . firstChild . nodeValue ;
192
+ var ip = elements_2 [ i ] . getElementsByTagName ( "cIP" ) [ 0 ] . firstChild . nodeValue ;
193
+
194
+ alert ( "name=" + name + " ,ip=" + ip ) ;
195
+
196
+ break ;
197
+ }
198
+ }
199
+ } ) ;
200
+ }
0 commit comments