如何使用c#中的遞歸函數遍歷(按順序讀取所有節點)XML文檔?使用遞歸函數遍歷XML
我要的是讀取XML的所有節點(其中有屬性),並在相同的結構把它們打印成XML(但沒有節點的localName)
感謝
如何使用c#中的遞歸函數遍歷(按順序讀取所有節點)XML文檔?使用遞歸函數遍歷XML
我要的是讀取XML的所有節點(其中有屬性),並在相同的結構把它們打印成XML(但沒有節點的localName)
感謝
IEnumerable<atype> yourfunction(XElement element)
{
foreach(var node in element.Nodes)
{
yield return yourfunction(node);
}
//do some stuff
}
using System.Xml;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var doc = new XmlDocument();
// Load xml document.
TraverseNodes(doc.ChildNodes);
}
private static void TraverseNodes(XmlNodeList nodes)
{
foreach(XmlNode node in nodes)
{
// Do something with the node.
TraverseNodes(node.ChildNodes);
}
}
}
}
thanx ..這解決了問題 – Kaja
如果這解決了你的問題,你可以標記爲正確的答案?謝謝。 –
static void Main(string[] args)
{
XmlDocument doc = new XmlDocument();
doc.Load("../../Employees.xml");
XmlNode root = doc.SelectSingleNode("*");
ReadXML(root);
}
private static void ReadXML(XmlNode root)
{
if (root is XmlElement)
{
DoWork(root);
if (root.HasChildNodes)
ReadXML(root.FirstChild);
if (root.NextSibling != null)
ReadXML(root.NextSibling);
}
else if (root is XmlText)
{}
else if (root is XmlComment)
{}
}
private static void DoWork(XmlNode node)
{
if (node.Attributes["Code"] != null)
if(node.Name == "project" && node.Attributes["Code"].Value == "Orlando")
Console.WriteLine(node.ParentNode.ParentNode.Attributes["Name"].Value);
}
我還是不明白你真正想做什麼。你可能會展示一個非常簡單而簡短的例子嗎?你的原始XML是什麼樣的,你想要回來什麼? 「打印它們」是什麼意思 - 寫入控制檯?寫入文件?你不應該看XSLT從XML轉換到XML嗎?看起來像一個完美契合。 –
我同意XSLT是最好的1..但在這裏,我期待一個簡單的遞歸算法..無論如何 – Kaja