发布网友 发布时间:2022-05-10 04:29
共2个回答
懂视网 时间:2022-05-15 12:01
本文主要和大家介绍了nodejs实现解析xml字符串为对象的方法,涉及nodejs针对xml格式字符串的解析与转换相关操作技巧,需要的朋友可以参考下,希望能帮助到大家。var xmlreader = require("xmlreader"); var fs = require("fs"); var xml_string = '<response id="1" shop="aldi">' + 'This is some other content' + '<who name="james">James May</who>' + '<who name="sam">' + 'Sam Decrock' + '<location>Belgium</location>' + '</who>' + '<who name="jack">Jack Johnsen</who>' + '<games age="6">' + '<game>Some great game</game>' + '<game>Some other great game</game>' + '</games>' + '<note>These are some notes</note>' + '</response>'; xmlreader.read(xml_string, function(errors, response){ if(null !== errors ){ console.log(errors) return; } console.log( response.response ); console.log( response.response.text() ); });
没啥新奇的,看看输出吧
第一句输出结果为:
{ attributes : [Function], parent : [Function], count : [Function], at : [Function], each : [Function], text : [Function], who : { array : [[Object], [Object], [Object]], count : [Function], at : [Function], each : [Function] }, games : { attributes : [Function], parent : [Function], count : [Function], at : [Function], each : [Function], game : { array : [Object], count : [Function], at : [Function], each : [Function] } }, note : { attributes : [Function], parent : [Function], count : [Function], at : [Function], each : [Function], text : [Function] } }
第二句输出:
This is some other content
根据输出我们就可以猜这东西是怎么回事儿了。
1、xmlreader
将xml转换为JSON对象(这样表述不准确,但是大家知道怎么一回事儿)。
2、转换成的JSON对象的嵌套结构与原xml标签嵌套结构相同。
3、视xml中同一级别出现某标签次数不同(一次和多次)生出不同的对应对象,如上的node为一次,who为三次。
4、提供了一下函数供操作属性或者遍历等等。
各方法含义:
1、attributes:获取所有属性。
2、parent:获取父节点。
3、count:获取数目。
4、at:获取下标为指定值的节点。
5、each:遍历,参数为一个函数。
6、text:获取节点内的文本,仅当前节点的文本,不包含子节点的文本。
热心网友 时间:2022-05-15 09:09
节点值格式XML解析办 /** * @name ParseXml贰DtoByDom四j * @title 解析XML并其节点元素压入DTO * @param String[XML字符串] * @param boolean[根元素标志] * @return DTO * @description * @author */ public static final OutputDTO ParseXml贰DtoByDom四j(String strXml, boolean hasRoot){ OutputDTO outDto = new BaseOutputDTO(); String strTitle = " "; Document document = null; try { document = hasRoot ? DocumentHelper.parseText(strTitle + strXml) : DocumentHelper.parseText(strTitle + " " + strXml + " "); } catch (DocumentException e) { final String MSG = errorMsg + strXml ; log.error(MSG, e); } Element root = document.getRootElement(); for ( Iterator i = root.elementIterator(); i.hasNext(); ) { Element leaf = (Element) i.next(); outDto.put(leaf.getName().toLowerCase(), leaf.getData()); } return outDto; } /** * @name ParseDto贰XmlByDom四j * @title DTOKey-Value键值映射标准XML Document * @param DTO * @param boolean 否带信息 * @return String * @description 说明:YHCIP已经提供Dto.toXml()能简单转换.需要高级功能则需借助Dom四J扩展即 * @author */ public static final String ParseDto贰XmlByDom四j(DTO dto, boolean hasHead){ Document document = DocumentHelper.createDocument(); document.addElement("root"); Element root = document.getRootElement(); Iterator keyIterator = dto.keySet().iterator(); while(keyIterator.hasNext()){ String key = (String)keyIterator.next(); String value = dto.getAsString(key); Element leaf = root.addElement(key); leaf.setText(value); } String outXmlWithHead = document.asXML(); String outXmlWithoutHead = outXmlWithHead.substring(三吧); return hasHead ? outXmlWithHead : outXmlWithoutHead; } 三. 节点属性格式XML解析办 /** * @name ParseXml贰DtoByDom四j * @title 解析XML并其节点元素压入DTO * @param String[XML字符串] * @param xPath[节点路径]例:"//paralist/row" 则表示根节点paralistrow节点xPath路径 * @return OutputDTO * @description 支持XML节点任意属性 存储结构态压入DTO */ public static final DTO ParseXml贰DtoByDom四j(String pStrXml, String pXPath){ DTO outDto = new BaseDTO(); String strTitle = " "; Document document = null; try { document = DocumentHelper.parseText(strTitle + pStrXml); } catch (DocumentException e) { log.error("XML格式字符串转换XML DOM象发错误.\n"); e.printStackTrace(); } Element root = document.getRootElement(); root.attributeIterator(); Element elNode = (Element)document.selectSingleNode(pXPath); for ( Iterator it = elNode.attributeIterator(); it.hasNext(); ) { Attribute attribute = (Attribute) it.next(); outDto.put(attribute.getName(), attribute.getData()); } return outDto; } /** * @name ParseList贰XmlByDom四j * @title List转换XML格式数据 * @param pList 传入List数据 * @param pRootNodeName 根节点名称 * @param pPropNameValue 根节点name属性值 * @return String * @description List象类型Map型 */ public static final String ParseList贰XmlByDom四j(List pList, String pRootNodeName, String pPropNameValue){ Document document = DocumentHelper.createDocument(); Element elRoot = document.addElement(pRootNodeName); elRoot.addAttribute("name", pPropNameValue); for(int i = 0; i < pList.size(); i++){ Map map = (Map)pList.get(i); Element elRow = elRoot.addElement("row"); Iterator it = map.entrySet().iterator(); while(it.hasNext()){ Map.Entry entry = (Map.Entry)it.next(); elRow.addAttribute((String)entry.getKey(), String.valueOf(entry.getValue())); } } String outXml = document.asXML(); return outXml.substring(三9, outXml.length());