दिलचस्प पोस्ट
कर्व के तहत क्षेत्र की गणना करें जावा में एफएफटी एल्गोरिथम का उपयोग कर ऑडियो स्पेक्ट्रम विश्लेषण मैं MySQL रूट उपयोगकर्ता के पूर्ण विशेषाधिकार को कैसे पुनर्स्थापित कर सकता हूं? एक फ़ाइल से nth लाइन प्राप्त करने के लिए बैश उपकरण पैनल के साथ डबल बफ़रिंग कैमरा एप्लिकेशन का उपयोग किए बिना पृष्ठभूमि में एक छवि कैप्चर कैसे करें CSS का उपयोग करके ब्राउज़र आकार के साथ छवियों का स्वचालित रूप से आकार बदलें फ़ंक्शन के अंदर फ़ंक्शन घोषणाओं के लिए कोई उपयोग होता है? पायथन का उपयोग करके HTML को पार्स करना परियोजना का कार्य> ग्रहण में स्वच्छ ओएस एक्स शेर में, लैंग यूटीएफ -8 में सेट नहीं है, इसे ठीक कैसे करें? स्ट्रिंग के लिए Linq int DbContext निपटान के बिना परिवर्तन त्यागें क्या कोई यह बता सकता है कि ट्रैफ़िकस्टैट्स एंड्रॉइड ओएस में अपनी जादू कैसे काम करता है? 'आयात मॉड्यूल' या 'मॉड्यूल आयात से'

पुनरावर्ती, पेरीव्यू ग # में विशेषताओं के साथ एक्सएमएल फ़ाइल पार्स करना

मैं वर्तमान में एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जहां कोई ऐप एक्सएमएल फाइलों पर ले जाएगा और सी # में ट्रीव्यू में प्रदर्शित होगा। मैं इस कोड को लिखने के लिए विजुअल स्टूडियो 10 का उपयोग कर रहा हूं।

मैं विशेषताओं का प्रदर्शित होने की संख्या को सीमित नहीं कर सकता। मैंने प्रत्येक एट्रिब्यूट्स के माध्यम से फोरश पाश को लूप में इस्तेमाल किया है और इसे प्रदर्शित किया है, लेकिन यह प्रत्येक नोड के प्रत्येक बच्चे के लिए विशेषताओं को प्रदर्शित करता है। केवल एक बार गुणों को प्रदर्शित करने के लिए मैं इस कोड को कैसे संशोधित कर सकता हूँ?

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Xml; namespace xmlToTreeview { public partial class Form1 : Form { string samplePath = Application.StartupPath + @"\\sample.xml"; public Form1() { InitializeComponent(); DisplayTreeView(samplePath); } private void DisplayTreeView(string pathname) { try { // SECTION 1. Create a DOM Document and load the XML data into it. XmlDocument dom = new XmlDocument(); dom.Load(pathname); // SECTION 2. Initialize the TreeView control. treeView1.Nodes.Clear(); treeView1.Nodes.Add(new TreeNode(dom.DocumentElement.Name)); TreeNode tNode = new TreeNode(); tNode = treeView1.Nodes[0]; // SECTION 3. Populate the TreeView with the DOM nodes. AddNode(dom.DocumentElement, tNode); } catch (XmlException xmlEx) { MessageBox.Show(xmlEx.Message); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void AddNode(XmlNode inXmlNode, TreeNode inTreeNode) { XmlNode xNode; TreeNode tNode; XmlNodeList nodeList; int i; // Loop through the XML nodes until the leaf is reached. // Add the nodes to the TreeView during the looping process. if (inXmlNode.HasChildNodes) { nodeList = inXmlNode.ChildNodes; for (i = 0; i <= nodeList.Count - 1; i++) { xNode = inXmlNode.ChildNodes[i]; inTreeNode.Nodes.Add(new TreeNode(xNode.Name)); tNode = inTreeNode.Nodes[i]; //Check if the XmlNode has attributes if (inXmlNode.Attributes.Count != 0) { foreach (XmlAttribute att in inXmlNode.Attributes) { inTreeNode.Text = inTreeNode.Text + " " + att.Name + ": " + att.Value; } } AddNode(xNode, tNode); } } else { // Here you need to pull the data from the XmlNode based on the // type of node, whether attribute values are required, and so forth. inTreeNode.Text = (inXmlNode.OuterXml).Trim(); } treeView1.ExpandAll(); } } } 

और यहां मेरे एक्सएमएल का एक उदाहरण है

 <?xml version="1.0" encoding="utf-8"?> <DataConfiguration xmln="abcefg12345" xmlns:xsi="12345abcefg" xsi:schemaLocation="12345abcefg12345abcefg"> <Hosts> <Sites> <Site Name="ss"> <Host Id="aa"> <Address Host="www.www.com"> </Address> </Host> <Host Id="ee"> <Address Host="www.www.com"> </Address> </Host> <Host Id="dd"> <Address Host="www.www.com"> </Address> </Host> <Host Id="pp"> <Address Scheme="ppp" Host="www.www.com" Path="www.www.com"/> <Address Scheme="ppp" Host="www.www.com" Path="www.www.com/"/> </Host> <Host Id="ss"> <Address Scheme="ppp" Host="www.www.com" Path="www.www.com"/> <Address Scheme="ppp" Host="www.www.com" Path="www.www.com"/> </Host> <Host Id="561"> <Address Host="www.www.com"> </Address> </Host> </Site> <Site Name="hihi"> <Host Id="cc"> <Address Host="www.www.com"> </Address> </Host> <Host Id="sdD"> <Address Host="www.www.com"> </Address> </Host> <Host Id="8uj"> <Address Scheme="ppp" Host="www.www.com" Path="www.www.com"/> <Address Scheme="ppp" Host="www.www.com" Path="www.www.com"/> </Host> <Host Id="222"> <Address Scheme="ppp" Host="www.www.com" Path="www.www.com"/> <Address Scheme="ppp" Host="www.www.com" Path="www.www.com"/> </Host> <Host Id="hhh"> <Address Scheme="ppp" Host="www.www.com" Path="www.www.com"/> </Host> <Host Id="hhh"> <Address Scheme="ppp" Host="www.www.com" Path="www.www.com"/> </Host> </Site> </Sites> <Host Id="hhh"> <Address Scheme="ppp" Host="www.www.com" Path="www.www.com"/> </Host> <Host Id="hhh"> <Address Scheme="ppp" Host="www.www.com" Path="www.www.com"/> </Host> <Host Id="hhh"> <Address Scheme="ppp" Host="www.www.com" Path="www.www.com"/> </Host> <Host Id="hhh"> <Address Scheme="ppp" Host="www.www.com" Path="www.www.com"/> </Host> </Hosts> <DataPools> <DataPool Id="sss" default="sure"> <DataGroup Id="sss" Parent="aaa" UserCanSelectHost="sure" > <HostId Parent="hhhh">I'm breaking here</HostId> <DataSources> <empty/> </DataSources> </DataGroup> <DataGroup Id="ccc" UserCanSelectHost="whynot" > <HostId>God I'm breaking here again, i hope you can fix me</HostId> <DataSources> <empty/> </DataSources> </DataGroup> <DataGroup Id="sss" UserCanSelectHost="yessure" > <HostId>cry face</HostId> <webfg displaygroup="sss" provider="sss" id="ccc" principal="ccc" nioarc="ccc" nap="ccc" group="ccc"> </webfg> <nhood port="1234"/> <ServerNames> <!-- insert comment --> <!-- insert comment --> <!-- insert comment --> <ServerName>myname</ServerName> <ServerName>yourname</ServerName> </ServerNames> <!-- insert comment --> <Implementations> <Implementation> <Name>yourname</Name> <Type>typeme</Type> <Assembly>visionme</Assembly> <Path>ohno</Path> </Implementation> </Implementations>--> <cfgman port="ccc" /> <webservice provider="ccc" /> <webservice provider="ccc" /> <webservice provider="ccc" /> <parameters> <useeventpush value="ccc"/> </parameters> <webservice provider="ccc" /> <pollingFrequency value="1000"/> </DataGroup> </DataPool> <DataGroup Id="ccc " UserCanSelectHost="ccc" > <DataGroup Id="ccc " UserCanSelectHost="ccc" > <HostId>idk</HostId> <DataSources> <empty/> </DataSources> </DataGroup> <DataGroup Id="ccc " UserCanSelectHost="ccc" > <HostId>idk</HostId> <DataSources> <empty/> </DataSources> </DataGroup> <DataGroup Id="default" UserCanSelectHost="true" > <HostId>idk</HostId> </DataGroup> </DataGroup> </DataPools> </DataConfiguration> 

Solutions Collecting From Web of "पुनरावर्ती, पेरीव्यू ग # में विशेषताओं के साथ एक्सएमएल फ़ाइल पार्स करना"

आपको बाल नोड्स के माध्यम से लूप के गुणों के माध्यम से लूप को स्थानांतरित करने की आवश्यकता है:

  private void AddNode(XmlNode inXmlNode, TreeNode inTreeNode) { // Loop through the XML nodes until the leaf is reached. // Add the nodes to the TreeView during the looping process. if (inXmlNode.HasChildNodes) { //Check if the XmlNode has attributes foreach (XmlAttribute att in inXmlNode.Attributes) { inTreeNode.Text = inTreeNode.Text + " " + att.Name + ": " + att.Value; } var nodeList = inXmlNode.ChildNodes; for (int i = 0; i < nodeList.Count; i++) { var xNode = inXmlNode.ChildNodes[i]; var tNode = inTreeNode.Nodes[inTreeNode.Nodes.Add(new TreeNode(xNode.Name))]; AddNode(xNode, tNode); } } else { // Here you need to pull the data from the XmlNode based on the // type of node, whether attribute values are required, and so forth. inTreeNode.Text = (inXmlNode.OuterXml).Trim(); } treeView1.ExpandAll(); } 

अद्यतन करें

यदि आप नामस्थान गुण को फ़िल्टर करना चाहते हैं, तो आप एक्सटेंशन विधियां जोड़ सकते हैं:

 public static class XmlNodeExtensions { public static bool IsDefaultNamespaceDeclaration(this XmlAttribute attr) { if (attr == null) return false; if (attr.NamespaceURI != "http://www.w3.org/2000/xmlns/") return false; return attr.Name == "xmlns"; } public static bool IsNamespaceDeclaration(this XmlAttribute attr) { if (attr == null) return false; if (attr.NamespaceURI != "http://www.w3.org/2000/xmlns/") return false; return attr.Name == "xmlns" || attr.Name.StartsWith("xmlns:"); } } 

फिर इसे अवांछित XmlAttribute उदाहरणों को छोड़ने के लिए उपयोग करें आप पाठ के नोड्स के लिए OuterXml का उपयोग करते हुए न केवल उन तत्वों को, नामों के लिए + OuterXml डेटा के नाम के सभी नोड्स के पाठ को स्पष्ट रूप से सेट कर सकते हैं:

  private void AddNode(XmlNode inXmlNode, TreeNode inTreeNode) { if (inXmlNode is XmlElement) { // An element. Display element name + attribute names & values. foreach (var att in inXmlNode.Attributes.Cast<XmlAttribute>().Where(a => !a.IsNamespaceDeclaration())) { inTreeNode.Text = inTreeNode.Text + " " + att.Name + ": " + att.Value; } // Add children foreach (XmlNode xNode in inXmlNode.ChildNodes) { var tNode = inTreeNode.Nodes[inTreeNode.Nodes.Add(new TreeNode(xNode.Name))]; AddNode(xNode, tNode); } } else { // Not an element. Character data, comment, etc. Display all text. inTreeNode.Text = (inXmlNode.OuterXml).Trim(); } treeView1.ExpandAll(); } 

यदि आप वाकई केवल डिफ़ॉल्ट नेमस्पेस परिभाषाओं को फ़िल्टर करना चाहते हैं लेकिन अन्य को छोड़ना चाहते हैं, तो आप ऐसा कर सकते हैं:

  // An element. Display element name + attribute names & values. foreach (var att in inXmlNode.Attributes.Cast<XmlAttribute>().Where(a => !a.IsDefaultNamespaceDeclaration())) { inTreeNode.Text = inTreeNode.Text + " " + att.Name + ": " + att.Value; } 

संयोग से, मैं ऐसा करने की अनुशंसा नहीं करता क्योंकि निम्न वास्तव में वही बात है, अर्थात् नाम स्थान http://somenamespace में स्थानीय नाम DataConfiguration साथ एक तत्व:

 <ss:DataConfiguration xmlns:ss="http://somenamespace"/> <DataConfiguration xmlns="http://somenamespace"/> 

आपका पेड़ प्रथम तत्व के लिए नाम स्थान प्रदर्शित करेगा लेकिन दूसरा नहीं।

अपडेट 2

XmlDeclaration में XmlDeclaration को शामिल करने के लिए, शीर्ष स्तर की लूप को परिवर्तित करें:

  treeView1.Nodes.Clear(); foreach (XmlNode xNode in dom.ChildNodes) { var tNode = treeView1.Nodes[treeView1.Nodes.Add(new TreeNode(xNode.Name))]; AddNode(xNode, tNode); } 

अपडेट 3

DisplayTreeView में XmlDeclaration लूप को शामिल करने के लिए लूप को रखें:

  private void DisplayTreeView(string pathname) { try { // SECTION 1. Create a DOM Document and load the XML data into it. XmlDocument dom = new XmlDocument(); dom.Load(pathname); // SECTION 2. Initialize the TreeView control. treeView1.Nodes.Clear(); // SECTION 3. Populate the TreeView with the XML nodes. foreach (XmlNode xNode in dom.ChildNodes) { var tNode = treeView1.Nodes[treeView1.Nodes.Add(new TreeNode(xNode.Name))]; AddNode(xNode, tNode); } } catch (XmlException xmlEx) { MessageBox.Show(xmlEx.Message); } catch (Exception ex) { MessageBox.Show(ex.Message); } } 

साधारण पुनरावर्ती एल्गोरिदम का प्रयास करें

  static void Main(string[] args) { string input = "<a>" + "<b>" + "<c>val1</c>" + "<d>val2</d>" + "</b>" + "<e>val3</e>" + "<f>val4</f>" + "</a>"; XmlDocument doc = new XmlDocument(); doc.LoadXml(input); RecursiveRead(doc.DocumentElement); } static string RecursiveRead(XmlNode node) { List<string> children = new List<string>(); bool done = false; if (node.HasChildNodes) { foreach (XmlNode child in node) { children.Add(RecursiveRead(child)); } Console.WriteLine("table : {0}; children : {1}", node.Name, string.Join(",", children.ToArray())); //string cmd = "INSERT INTO " + second + " (" + first + ") VALUES ('" + xml.Value + "')"; //SqlCommand command = new SqlCommand(cmd, conn); //command.ExecuteNonQuery(); } else { return node.Value; } return node.Name; }