一个xmltojson类
生活随笔
收集整理的這篇文章主要介紹了
一个xmltojson类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Code
using?System.Text;
using?System.Xml;
using?System.Collections;
public?class?xmltojson
{
????public?xmltojson()
????{??//??//?TODO:?在此處添加構造函數邏輯??//
????}//這里我將它變成了public的屬性。??
????public?static?string?XmlToJSON(XmlDocument?xmlDoc)
????{
????????StringBuilder?sbJSON?=?new?StringBuilder();
????????sbJSON.Append("{?");
????????XmlToJSONnode(sbJSON,?xmlDoc.DocumentElement,?true);
????????sbJSON.Append("}");?return?sbJSON.ToString();
????}
????//??XmlToJSONnode:??Output?an?XmlElement,?possibly?as?part?of?a?higher?array?
????private?static?void?XmlToJSONnode(StringBuilder?sbJSON,?XmlElement?node,?bool?showNodeName)
????{
????????if?(showNodeName)
????????????sbJSON.Append("\""?+?SafeJSON(node.Name)?+?"\":?");
????????sbJSON.Append("{");
????????//?Build?a?sorted?list?of?key-value?pairs?????
????????//??where???key?is?case-sensitive?nodeName????
????????//??????????value?is?an?ArrayList?of?string?or?XmlElement?
????????//??so?that?we?know?whether?the?nodeName?is?an?array?or?not.????
????????SortedList?childNodeNames?=?new?SortedList();
????????//??Add?in?all?node?attributes?????
????????if?(node.Attributes?!=?null)
????????????foreach?(XmlAttribute?attr?in?node.Attributes)
????????????????StoreChildNode(childNodeNames,?attr.Name,?attr.InnerText);
????????//??Add?in?all?nodes?????
????????foreach?(XmlNode?cnode?in?node.ChildNodes)????
????????{
????????????if?(cnode?is?XmlText)
????????????????StoreChildNode(childNodeNames,?"value",?cnode.InnerText);
????????????else?if?(cnode?is?XmlElement)
????????????????StoreChildNode(childNodeNames,?cnode.Name,?cnode);
????????}????????//?Now?output?all?stored?info?
????????foreach?(string?childname?in?childNodeNames.Keys)
????????{
????????????ArrayList?alChild?=?(ArrayList)childNodeNames[childname];
????????????if?(alChild.Count?==?1)
????????????????OutputNode(childname,?alChild[0],?sbJSON,?true);
????????????else
????????????{
????????????????sbJSON.Append("?\""?+?SafeJSON(childname)?+?"\":?[?");
????????????????foreach?(object?Child?in?alChild)
????????????????????OutputNode(childname,?Child,?sbJSON,?false);
????????????????sbJSON.Remove(sbJSON.Length?-?2,?2);
????????????????sbJSON.Append("?],?");
????????????}
????????}
????????sbJSON.Remove(sbJSON.Length?-?2,?2);
????????sbJSON.Append("?}");
????}
????//??StoreChildNode:?Store?data?associated?with?each?nodeName???
????//??????????????????so?that?we?know?whether?the?nodeName?is?an?array?or?not.???
????private?static?void?StoreChildNode(SortedList?childNodeNames,?string?nodeName,?object?nodeValue)
????{????????//?Pre-process?contraction?of?XmlElement-s????
????????if?(nodeValue?is?XmlElement)
????????{
????????????//?Convert??<aa></aa>?into?"aa":null??????????
????????????//??????????<aa>xx</aa>?into?"aa":"xx"???????
????????????XmlNode?cnode?=?(XmlNode)nodeValue;
????????????if?(cnode.Attributes.Count?==?0)
????????????{
????????????????XmlNodeList?children?=?cnode.ChildNodes;
????????????????if?(children.Count?==?0)
????????????????????nodeValue?=?null;
????????????????else?if?(children.Count?==?1?&&?(children[0]?is?XmlText))
????????????????????nodeValue?=?((XmlText)(children[0])).InnerText;
????????????}
????????}
????????//?Add?nodeValue?to?ArrayList?associated?with?each?nodeName??????
????????//?If?nodeName?doesn't?exist?then?add?it??????
????????object?oValuesAL?=?childNodeNames[nodeName];
????????ArrayList?ValuesAL;
????????if?(oValuesAL?==?null)
????????{
????????????ValuesAL?=?new?ArrayList();
????????????childNodeNames[nodeName]?=?ValuesAL;
????????}
????????else
????????????ValuesAL?=?(ArrayList)oValuesAL;
????????ValuesAL.Add(nodeValue);
????}
????private?static?void?OutputNode(string?childname,?object?alChild,?StringBuilder?sbJSON,?bool?showNodeName)
????{
????????if?(alChild?==?null)
????????{
????????????if?(showNodeName)
????????????????sbJSON.Append("\""?+?SafeJSON(childname)?+?"\":?");
????????????sbJSON.Append("null");
????????}
????????else?if?(alChild?is?string)
????????{
????????????if?(showNodeName)
????????????????sbJSON.Append("\""?+?SafeJSON(childname)?+?"\":?");
????????????string?sChild?=?(string)alChild;
????????????sChild?=?sChild.Trim();
????????????sbJSON.Append("\""?+?SafeJSON(sChild)?+?"\"");
????????}
????????else
????????????XmlToJSONnode(sbJSON,?(XmlElement)alChild,?showNodeName);
????????sbJSON.Append(",?");
????}
????//?Make?a?string?safe?for?JSON???
????private?static?string?SafeJSON(string?sIn)
????{
????????StringBuilder?sbOut?=?new?StringBuilder(sIn.Length);
????????foreach?(char?ch?in?sIn)
????????{
????????????if?(char.IsControl(ch)?||?ch?==?'\'')
????????????{
????????????????int?ich?=?(int)ch;
????????????????sbOut.Append(@"\u"?+?ich.ToString("x4"));
????????????????continue;
????????????}
????????????else?if?(ch?==?'\"'?||?ch?==?'\\'?||?ch?==?'/')
????????????{?sbOut.Append('\\');?}
????????????sbOut.Append(ch);
????????}
????????return?sbOut.ToString();
????}
}
using?System.Text;
using?System.Xml;
using?System.Collections;
public?class?xmltojson
{
????public?xmltojson()
????{??//??//?TODO:?在此處添加構造函數邏輯??//
????}//這里我將它變成了public的屬性。??
????public?static?string?XmlToJSON(XmlDocument?xmlDoc)
????{
????????StringBuilder?sbJSON?=?new?StringBuilder();
????????sbJSON.Append("{?");
????????XmlToJSONnode(sbJSON,?xmlDoc.DocumentElement,?true);
????????sbJSON.Append("}");?return?sbJSON.ToString();
????}
????//??XmlToJSONnode:??Output?an?XmlElement,?possibly?as?part?of?a?higher?array?
????private?static?void?XmlToJSONnode(StringBuilder?sbJSON,?XmlElement?node,?bool?showNodeName)
????{
????????if?(showNodeName)
????????????sbJSON.Append("\""?+?SafeJSON(node.Name)?+?"\":?");
????????sbJSON.Append("{");
????????//?Build?a?sorted?list?of?key-value?pairs?????
????????//??where???key?is?case-sensitive?nodeName????
????????//??????????value?is?an?ArrayList?of?string?or?XmlElement?
????????//??so?that?we?know?whether?the?nodeName?is?an?array?or?not.????
????????SortedList?childNodeNames?=?new?SortedList();
????????//??Add?in?all?node?attributes?????
????????if?(node.Attributes?!=?null)
????????????foreach?(XmlAttribute?attr?in?node.Attributes)
????????????????StoreChildNode(childNodeNames,?attr.Name,?attr.InnerText);
????????//??Add?in?all?nodes?????
????????foreach?(XmlNode?cnode?in?node.ChildNodes)????
????????{
????????????if?(cnode?is?XmlText)
????????????????StoreChildNode(childNodeNames,?"value",?cnode.InnerText);
????????????else?if?(cnode?is?XmlElement)
????????????????StoreChildNode(childNodeNames,?cnode.Name,?cnode);
????????}????????//?Now?output?all?stored?info?
????????foreach?(string?childname?in?childNodeNames.Keys)
????????{
????????????ArrayList?alChild?=?(ArrayList)childNodeNames[childname];
????????????if?(alChild.Count?==?1)
????????????????OutputNode(childname,?alChild[0],?sbJSON,?true);
????????????else
????????????{
????????????????sbJSON.Append("?\""?+?SafeJSON(childname)?+?"\":?[?");
????????????????foreach?(object?Child?in?alChild)
????????????????????OutputNode(childname,?Child,?sbJSON,?false);
????????????????sbJSON.Remove(sbJSON.Length?-?2,?2);
????????????????sbJSON.Append("?],?");
????????????}
????????}
????????sbJSON.Remove(sbJSON.Length?-?2,?2);
????????sbJSON.Append("?}");
????}
????//??StoreChildNode:?Store?data?associated?with?each?nodeName???
????//??????????????????so?that?we?know?whether?the?nodeName?is?an?array?or?not.???
????private?static?void?StoreChildNode(SortedList?childNodeNames,?string?nodeName,?object?nodeValue)
????{????????//?Pre-process?contraction?of?XmlElement-s????
????????if?(nodeValue?is?XmlElement)
????????{
????????????//?Convert??<aa></aa>?into?"aa":null??????????
????????????//??????????<aa>xx</aa>?into?"aa":"xx"???????
????????????XmlNode?cnode?=?(XmlNode)nodeValue;
????????????if?(cnode.Attributes.Count?==?0)
????????????{
????????????????XmlNodeList?children?=?cnode.ChildNodes;
????????????????if?(children.Count?==?0)
????????????????????nodeValue?=?null;
????????????????else?if?(children.Count?==?1?&&?(children[0]?is?XmlText))
????????????????????nodeValue?=?((XmlText)(children[0])).InnerText;
????????????}
????????}
????????//?Add?nodeValue?to?ArrayList?associated?with?each?nodeName??????
????????//?If?nodeName?doesn't?exist?then?add?it??????
????????object?oValuesAL?=?childNodeNames[nodeName];
????????ArrayList?ValuesAL;
????????if?(oValuesAL?==?null)
????????{
????????????ValuesAL?=?new?ArrayList();
????????????childNodeNames[nodeName]?=?ValuesAL;
????????}
????????else
????????????ValuesAL?=?(ArrayList)oValuesAL;
????????ValuesAL.Add(nodeValue);
????}
????private?static?void?OutputNode(string?childname,?object?alChild,?StringBuilder?sbJSON,?bool?showNodeName)
????{
????????if?(alChild?==?null)
????????{
????????????if?(showNodeName)
????????????????sbJSON.Append("\""?+?SafeJSON(childname)?+?"\":?");
????????????sbJSON.Append("null");
????????}
????????else?if?(alChild?is?string)
????????{
????????????if?(showNodeName)
????????????????sbJSON.Append("\""?+?SafeJSON(childname)?+?"\":?");
????????????string?sChild?=?(string)alChild;
????????????sChild?=?sChild.Trim();
????????????sbJSON.Append("\""?+?SafeJSON(sChild)?+?"\"");
????????}
????????else
????????????XmlToJSONnode(sbJSON,?(XmlElement)alChild,?showNodeName);
????????sbJSON.Append(",?");
????}
????//?Make?a?string?safe?for?JSON???
????private?static?string?SafeJSON(string?sIn)
????{
????????StringBuilder?sbOut?=?new?StringBuilder(sIn.Length);
????????foreach?(char?ch?in?sIn)
????????{
????????????if?(char.IsControl(ch)?||?ch?==?'\'')
????????????{
????????????????int?ich?=?(int)ch;
????????????????sbOut.Append(@"\u"?+?ich.ToString("x4"));
????????????????continue;
????????????}
????????????else?if?(ch?==?'\"'?||?ch?==?'\\'?||?ch?==?'/')
????????????{?sbOut.Append('\\');?}
????????????sbOut.Append(ch);
????????}
????????return?sbOut.ToString();
????}
}
轉載于:https://www.cnblogs.com/daiye/archive/2009/09/25/1573885.html
總結
以上是生活随笔為你收集整理的一个xmltojson类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab语言转化为python语言_
- 下一篇: 面试题01(C++)