using PTMedicalInsurance.Variables; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Xml; using System.Xml.Linq; using System.Xml.XPath; namespace PTMedicalInsurance.Helper { class XmlHelper { /// <summary> /// 组织中心入参 /// </summary> /// <param name="infno"></param> /// <param name="input"></param> /// <returns></returns> public string setInput(XElement xInput) { XDocument XDoc = new XDocument(); XDoc.Add(xInput); XDoc.Declaration = new XDeclaration("1.0", "GBK", "yes"); return XDoc.ToStringWithDeclaration(); //扩展方法 https://learn.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/extension-methods } /// <summary> /// 根据JSonPath查找节点值,如果节点不存在则返回空值 /// </summary> /// <param name="jo"></param> /// <param name="jsonPath"></param> /// <returns></returns> public string getDestValue(string source, string destPath) { try { XDocument XDoc = XDocument.Parse(source); XElement XDest = XDoc.XPathSelectElement(destPath); if (XDest != null) return XDest.Value; else return "节点为空!"; } catch (Exception ex) { return "查找XML节点异常:" + ex.Message; } } public string ToJSON(string source) { string json = ""; try { source = Regex.Replace(source, "<row", "<row xmlns:json=\"http://james.newtonking.com/projects/json\" json:Array=\"true\" ", RegexOptions.IgnoreCase); XDocument xDoc = XDocument.Parse(source); json = Newtonsoft.Json.JsonConvert.SerializeXmlNode(xDoc.ToXmlDocument()); return json; } catch (Exception ex) { return "转换异常:" + ex.Message; } finally { Global.writeLog("XMLToJSON", source,json); } } public string ToXML(string jsonSource) { try { XmlDocument xe = Newtonsoft.Json.JsonConvert.DeserializeXmlNode(jsonSource); return xe.OuterXml; } catch (Exception ex) { return "转换异常:" + ex.Message; } } } public static class MyExtensions { /// <summary> /// Doc输出无声明,强行补上 /// </summary> /// <param name="doc"></param> /// <returns></returns> public static string ToStringWithDeclaration(this XDocument doc) { return doc.Declaration.ToString() + Environment.NewLine + doc.ToString(); } /// <summary> /// 无缩进格式(压缩格式) /// </summary> /// <param name="doc"></param> /// <returns></returns> public static string ToCompressString(this XDocument doc) { return doc.Declaration.ToString() + doc.ToString(SaveOptions.DisableFormatting); } public static XmlDocument ToXmlDocument(this XDocument xDocument) { var xmlDocument = new XmlDocument(); using (var xmlReader = xDocument.CreateReader()) { xmlDocument.Load(xmlReader); } return xmlDocument; } public static XDocument ToXDocument(this XmlDocument xmlDocument) { using (var nodeReader = new XmlNodeReader(xmlDocument)) { nodeReader.MoveToContent(); return XDocument.Load(nodeReader); } } } }