XML XElement类的一些属性和方法
测试一下XElement
类和XDocument
的一些属性和方法。自己多注意看下重载。
▲ 查询 Xml 的方法
一个Test.xml
文档如下:
<?xml version="1.0" encoding="utf-8"?>
<Person>
<Name>孙悟空</Name>
<Age>500</Age>
<Sex>男</Sex>
<Dog>
<Name>小黑</Name>
<Age>9</Age>
</Dog>
<Dog>
<Name>小黄</Name>
<Age>10</Age>
</Dog>
<Good>100</Good>
<Dog>
<Name>小辉</Name>
<Age>15</Age>
</Dog>
</Person>
Root 属性
XDocument xDocTest = XDocument.Load("Test.xml");
XElement rootElem = xDocTest.Root;
Console.WriteLine(rootElem.ToString());
直接转字符串,是按原样输出。当然,没有前面那个属性了:
<Person>
<Name>孙悟空</Name>
<Age>500</Age>
<Sex>男</Sex>
<Dog>
<Name>小黑</Name>
<Age>9</Age>
</Dog>
<Dog>
<Name>小黄</Name>
<Age>10</Age>
</Dog>
<Good>100</Good>
<Dog>
<Name>小辉</Name>
<Age>15</Age>
</Dog>
</Person>
也可以直接按下面加载Root
属性:
XElement rootElem = XElement.Load("Test.xml");
Nodes 方法
XDocument xDocTest = XDocument.Load("Test.xml");
XElement rootElem = xDocTest.Root;
IEnumerable<object> allNodes = rootElem.Nodes();
foreach (var item in allNodes)
{
Console.WriteLine(item.ToString());
Console.WriteLine();
}
输出:
<Name>孙悟空</Name>
<Age>500</Age>
<Sex>男</Sex>
<Dog>
<Name>小黑</Name>
<Age>9</Age>
</Dog>
<Dog>
<Name>小黄</Name>
<Age>10</Age>
</Dog>
<Good>100</Good>
<Dog>
<Name>小辉</Name>
<Age>15</Age>
</Dog>
返回的是object
类型的集合,都是下一级的子节点。
Elements 方法
还要重载:
public IEnumerable<XElement> Elements(XName name);
因为和上面是继承关系,所以差不多。
XDocument xDocTest = XDocument.Load("Test.xml");
XElement rootElem = xDocTest.Root;
IEnumerable<XElement> allNodes = rootElem.Elements();
foreach (var item in allNodes)
{
Console.WriteLine(item.ToString());
Console.WriteLine();
}
输出:
<Name>孙悟空</Name>
<Age>500</Age>
<Sex>男</Sex>
<Dog>
<Name>小黑</Name>
<Age>9</Age>
</Dog>
<Dog>
<Name>小黄</Name>
<Age>10</Age>
</Dog>
<Good>100</Good>
<Dog>
<Name>小辉</Name>
<Age>15</Age>
</Dog>
返回的是XElement
类型的集合,都是下一级的子节点。
看看重载,加一个XName
之Dog
:
XDocument xDocTest = XDocument.Load("Test.xml");
XElement rootElem = xDocTest.Root;
IEnumerable<XElement> allNodes = rootElem.Elements("Dog");
foreach (XElement item in allNodes)
{
Console.WriteLine(item.ToString());
Console.WriteLine();
}
输出:
<Dog>
<Name>小黑</Name>
<Age>9</Age>
</Dog>
<Dog>
<Name>小黄</Name>
<Age>10</Age>
</Dog>
<Dog>
<Name>小辉</Name>
<Age>15</Age>
</Dog>
可见,能查询到所有的Dog
节点。
XElement 方法
这个是返回第一个符号的节点。
XDocument xDocTest = XDocument.Load("Test.xml");
XElement rootElem = xDocTest.Root;
XElement xElement = rootElem.Element("Dog");
Console.WriteLine(xElement.ToString());
输出:
<Dog>
<Name>小黑</Name>
<Age>9</Age>
</Dog>
Descendsants 方法
XDocument xDocTest = XDocument.Load("Test.xml");
XElement rootElem = xDocTest.Root;
IEnumerable<XElement> xElements = rootElem.Descendants();
foreach(var item in xElements)
{
Console.WriteLine(item.ToString());
Console.WriteLine();
}
看下效果,全部输出来了。节点,子节点:
<Name>孙悟空</Name>
<Age>500</Age>
<Sex>男</Sex>
<Dog>
<Name>小黑</Name>
<Age>9</Age>
</Dog>
<Name>小黑</Name>
<Age>9</Age>
<Dog>
<Name>小黄</Name>
<Age>10</Age>
</Dog>
<Name>小黄</Name>
<Age>10</Age>
<Good>100</Good>
<Dog>
<Name>小辉</Name>
<Age>15</Age>
</Dog>
<Name>小辉</Name>
<Age>15</Age>
DescendantNodes 方法
XDocument xDocTest = XDocument.Load("Test.xml");
XElement rootElem = xDocTest.Root;
IEnumerable<object> xElements = rootElem.DescendantNodes();
foreach(var item in xElements)
{
Console.WriteLine(item.ToString());
Console.WriteLine();
}
效果是这样的:
<Name>孙悟空</Name>
孙悟空
<Age>500</Age>
500
<Sex>男</Sex>
男
<Dog>
<Name>小黑</Name>
<Age>9</Age>
</Dog>
<Name>小黑</Name>
小黑
<Age>9</Age>
9
<Dog>
<Name>小黄</Name>
<Age>10</Age>
</Dog>
<Name>小黄</Name>
小黄
<Age>10</Age>
10
<Good>100</Good>
100
<Dog>
<Name>小辉</Name>
<Age>15</Age>
</Dog>
<Name>小辉</Name>
小辉
<Age>15</Age>
15
DescendantsAndSelf 方法
注意看重载,还可以指定节点XName
名称。
XDocument xDocTest = XDocument.Load("Test.xml");
XElement rootElem = xDocTest.Root;
IEnumerable<XElement> xElements = rootElem.DescendantsAndSelf();
foreach(var item in xElements)
{
Console.WriteLine(item.ToString());
Console.WriteLine();
}
效果:
<Person>
<Name>孙悟空</Name>
<Age>500</Age>
<Sex>男</Sex>
<Dog>
<Name>小黑</Name>
<Age>9</Age>
</Dog>
<Dog>
<Name>小黄</Name>
<Age>10</Age>
</Dog>
<Good>100</Good>
<Dog>
<Name>小辉</Name>
<Age>15</Age>
</Dog>
</Person>
<Name>孙悟空</Name>
<Age>500</Age>
<Sex>男</Sex>
<Dog>
<Name>小黑</Name>
<Age>9</Age>
</Dog>
<Name>小黑</Name>
<Age>9</Age>
<Dog>
<Name>小黄</Name>
<Age>10</Age>
</Dog>
<Name>小黄</Name>
<Age>10</Age>
<Good>100</Good>
<Dog>
<Name>小辉</Name>
<Age>15</Age>
</Dog>
<Name>小辉</Name>
<Age>15</Age>
Ancestors 方法
XDocument xDocTest = XDocument.Load("Test.xml");
XElement rootElem = xDocTest.Root;
XElement xElem = rootElem.Element("Dog").Element("Name");
IEnumerable<XElement> xElements = xElem.Ancestors();
foreach(var item in xElements)
{
Console.WriteLine(item.ToString());
Console.WriteLine();
}
效果:
<Dog>
<Name>小黑</Name>
<Age>9</Age>
</Dog>
<Person>
<Name>孙悟空</Name>
<Age>500</Age>
<Sex>男</Sex>
<Dog>
<Name>小黑</Name>
<Age>9</Age>
</Dog>
<Dog>
<Name>小黄</Name>
<Age>10</Age>
</Dog>
<Good>100</Good>
<Dog>
<Name>小辉</Name>
<Age>15</Age>
</Dog>
</Person>
AncestorsAndSelf 方法
XDocument xDocTest = XDocument.Load("Test.xml");
XElement rootElem = xDocTest.Root;
XElement xElem = rootElem.Element("Dog").Element("Name");
IEnumerable<XElement> xElements = xElem.AncestorsAndSelf();
foreach(var item in xElements)
{
Console.WriteLine(item.ToString());
Console.WriteLine();
}
效果:
<Name>小黑</Name>
<Dog>
<Name>小黑</Name>
<Age>9</Age>
</Dog>
<Person>
<Name>孙悟空</Name>
<Age>500</Age>
<Sex>男</Sex>
<Dog>
<Name>小黑</Name>
<Age>9</Age>
</Dog>
<Dog>
<Name>小黄</Name>
<Age>10</Age>
</Dog>
<Good>100</Good>
<Dog>
<Name>小辉</Name>
<Age>15</Age>
</Dog>
</Person>
它包含了自己。
Parent 属性
XDocument xDocTest = XDocument.Load("Test.xml");
XElement rootElem = xDocTest.Root;
XElement xElem = rootElem.Element("Dog").Element("Name");
XElement xElemParent = xElem.Parent;
Console.WriteLine(xElemParent.ToString());
效果:
<Dog>
<Name>小黑</Name>
<Age>9</Age>
</Dog>
参考:《C#图解教程》P383
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了