在XML文档中找不到特定的XML元素
本文关键字:XML 元素 找不到 文档 | 更新日期: 2023-09-27 18:26:15
我刚刚遇到了一个令人头疼的问题,我不太确定为什么这不起作用。我想找到所有具有"视频"属性的元素。
我的XML文档如下所示:
<MainMenu>
<div id="BroughtInMenu">
<div class="menuItem0">
Menu Item
<div class="subMenu0">
<div class="menuItem1">
Dictation
<div class="subMenu1">
<div class="menuItem2" video="1">Fee Earner</div>
<div class="menuItem2" video="1">Secretary</div>
<div class="menuItem2" video="1">View File History</div>
</div>
</div>
<div class="menuItem1">
PM Advanced Agenda
<div class="subMenu1">
<div class="menuItem2">
Help
<div class="subMenu2">
<div class="menuItem3" video="1">Release Notes</div>
</div>
</div>
<div class="menuItem2">
System Maintenance
<div class="subMenu2">
<div class="menuItem3" video="1">Additional Field Setup</div>
<div class="menuItem3" video="1">Role Permission Maintenance</div>
<div class="menuItem3" video="1">Shared Diary Permissions</div>
</div>
</div>
<div class="menuItem2">
Utilities
<div class="subMenu2">
<div class="menuItem3" video="1">Change Entity Subtype</div>
<div class="menuItem3" video="1">Field Maintenance</div>
<div class="menuItem3" video="1">Move Client and Files to Fee Earner</div>
<div class="menuItem3" video="1">Reallocate Files</div>
</div>
</div>
</div>
</div> . . . . . . . . . . . . . . . . ..
这与HTML非常相似。这是一个网站,所以在最后我想得到所有的元素与属性"视频"。
如果我能做到这一点,那么我将只获取属性为"video"的div元素,然后我将能够将其用于其他事情,比如在搜索中,我实际搜索xml文档并返回div,等等…希望你能在这里看到我的漂移。。。
因为视频属性将指向一个位置,所以在单击div时跳转到视频对于html来说非常有用。
到目前为止,我已经尝试过了,但我根本没有得到元素:
XElement xDoc = XElement.Load(Server.MapPath("automation/xml/mainMenu.xml"));
IEnumerable<XElement> list = from el in xDoc.Elements("div") where el.Attribute("video") != null select el;
foreach (XElement element in list)
{
//Nothing found?
}
我也想过REGEX。。。也许regex能够提取我想要的div,已经是文本格式了,这样我就可以把它推送到网站中的html元素中?
任何帮助都将不胜感激!
使用Descendands
而不是Elements
。Elements
只返回直属子级。
var xDoc = XElement.Load(Server.MapPath("automation/xml/mainMenu.xml"));
var list = from el in xDoc.Descendants("div")
where el.Attribute("video") != null
select el;
foreach (XElement element in list)
{
//Nothing found?
}
您可以选择XPath中存在特定属性的元素。要使用XPath扩展方法,需要包含名称空间。
using System.Xml.XPath;
XPath(如"//div[@video]")将包括任何级别的所有"div"标记,但将所选元素过滤为仅具有"video"属性的元素,这样就不会不必要地在大量元素中循环检查属性的存在。
var xDoc = XElement.Load(Server.MapPath("automation/xml/mainMenu.xml"));
foreach (var divWithVideo in xDoc.XPathSelectElements ("//div[@video]")) {
Console.WriteLine (divWithVideo);
}
在这里,您只对具有"视频"属性的元素进行迭代。