在c#中获取一个具有特定属性值的xml元素
本文关键字:属性 元素 xml 一个 获取 | 更新日期: 2023-09-27 18:27:24
我需要获得一个SubTopic元素的值,该元素有一个名为"Name"的attribute
,具有特定值。我是这样做的;
IEnumerable<XElement> list =
(from el in xdoc.Elements()
where (string)el.Attribute("Name") == "creatingTests"
select el);
集合中没有任何元素。
我尝试放置xdoc.Elements("SubTopic")
而不是空参数,但没有成功。
我的XML文件结构;
<?xml version="1.0" encoding="windows-1250" ?>
<Help Title="TestTool - tematy pomocy">
<Topic Name="creatingTests" Title="Tworzenie testów">
<SubTopic Name="saveload" Title="Zapis i odczyt z pliku">
Content
</SubTopic>
</Topic>
</Help>
如何获得帮助/主题(名称="creatingTests")的值?
xdoc
当然是加载了xml的XDocument
对象,它确实包含了我的文件的内容。
xdoc.Elements()
只返回一个元素-XML树的根(在您的示例中是<Help>
元素。
将您的查询更改为:
IEnumerable<XElement> list =
(from el in xdoc.Root.Elements()
where (string)el.Attribute("Name") == "creatingTests"
select el);
它返回带有一个元素的集合。使用First
或FirstOrDefault
将其作为单个项目而非集合获取:
XElement item = (from el in xdoc.Root.Elements()
where (string)el.Attribute("Name") == "creatingTests"
select el).FirstOrDefault();
这里有一个使用System.Xml.XXPath:的替代方案
using System.Xml.Linq;
using System.Xml.XPath;
class Program
{
static void Main(string[] args)
{
var xdoc = XDocument.Load("input.xml");
var subTopic = xdoc
.XPathSelectElement("//Topic[@Name='creatingTests']/SubTopic");
}
}
非常简单的方法是使用XSLT。。
1.创建一个XSLT模板。
2.用c#来称呼它。
xmlDaynamic.DocumentContent = "Your XML Input";
xmlDaynamic.TransformSource = "YourTemplate with extension";
3.你的任务完成了。
4.xmlDaynamic是一个服务器控件。
尝试使用XPATH
http://support.microsoft.com/kb/308333
"//Topic[@Name='creatingTests']"