如何迭代XML文件
问题描述:
如何迭代XML树的所有元素并访问它们?我的意思是输入得到未知的xml文件,并且它迭代的代码本身不知道元素和分支的数量。如何迭代XML文件
我知道这是很多关于这些主题的答案,并且该解决方案已准备好实现代码,其中已知结构xml。
这是我使用的是代码:
class Program
{
static void Process(XElement element)
{
if (!element.HasElements)
{
Console.WriteLine(element.GetAbsoluteXPath());
}
else
{
foreach (XElement child in element.Elements())
{
Process(child);
}
}
}}
static void Main()
{
var doc = XDocument.Load("C:\\Users\\Błażej\\Desktop\\authors1.xml");
List<string> elements = new List<string>();
Program.Process(doc.Root);
Console.ReadKey();
}
public static class XExtensions
{
public static string GetAbsoluteXPath(this XElement element)
{
if (element == null)
{
throw new ArgumentNullException("element");
}
Func<XElement, string> relativeXPath = e =>
{
int index = e.IndexPosition();
string name = e.Name.LocalName;
return (index == -1) ? "/" + name : string.Format
(
"/{0}[{1}]",
name,
index.ToString()
);
};
var ancestors = from e in element.Ancestors()
select relativeXPath(e);
return string.Concat(ancestors.Reverse().ToArray()) +
relativeXPath(element);
}
public static int IndexPosition(this XElement element)
{
if (element == null)
{
throw new ArgumentNullException("element");
}
if (element.Parent == null)
{
return -1;
}
int i = 1;
foreach (var sibling in element.Parent.Elements(element.Name))
{ // czyli patrzymy na rodzeństwo, czy występują podobne np. au_id[1], au_id[2]
if (sibling == element)
{
return i;
}
else
{
i++;
}
}
throw new InvalidOperationException
("element has been removed from its parent.");
}
现在,我怎么一些元素通过迭代添加到exisitng节点?这是可能的 ?
答
正如@strongbutgood提到的,这是非常通用的。 可能低于通用代码帮助
Dim xdoc As New XDocument();
xdoc = XDocument.Parse(myXML);
// Adding new element
xdoc.Element(<Your_Parent_Node_Name>).Add(new XElement("<New_Element_Name>", "<New_Element_Value>"));
// Deleting existing element
xdoc.Descendants().Where(s =>s.Value == "<Element_To_Be_Removed>").Remove();
希望这有助于。
请注意,这是一个通用的答案,你将需要重新写,按您的需求
如果XML的架构尚不清楚,但有可能,它会像太多的代码。您可以使用XMLDocument或XPATHDocument。或者在LINQ中使用XDocument,它可以让你读取XML。 – A3006
这可能有助于确切知道你想达到的目标。 – PaulF
我需要一个迭代树xml的所有元素的方法。这个想法是使代码在xml文件中的各个分支上通用。 –