在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元素中?

任何帮助都将不胜感激!

在XML文档中找不到特定的XML元素

使用Descendands而不是ElementsElements只返回直属子级。

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);
}

在这里,您只对具有"视频"属性的元素进行迭代。