【问题标题】:Get Node Names by a specific depths按特定深度获取节点名称
【发布时间】:2013-06-13 13:22:09
【问题描述】:

我想要做的是给定一个深度返回该深度的节点名称。我不关心该级别的信息,只关心元素名称。

所以给定 1 它只会返回 BookStoreInfo 和 Book

给定 2,它将只返回地址、电话、传真、书名、ISBN

<BookStore>
  <BookStoreInfo>
    <Address />
    <Tel />
    <Fax />
 <BookStoreInfo>
 <Book>
    <BookName />
    <ISBN />
  <PublishDate />
 </Book>
 <Book>
 ....
 </Book>
</BookStore>

这是我目前正在尝试的。当我对节点进行计数时,它返回 11,这是正确的,但是当我显示节点时,它会显示节点以及其中我不想要的所有内容

        XDocument doc = XDocument.Load(doc);
        var AnswersScript = doc.Document.Element("root").Nodes();

        int count = 0;

        foreach (var node in AnswersScript)
        {
            count++;
            Console.WriteLine(node);
        }
        Console.WriteLine(count);

【问题讨论】:

  • 让我们看看你到目前为止都做了什么。
  • 你想用这个做什么?您真的有一个 XML 文件,其内容完全不为您所知吗?解析这样的事情可能会非常复杂。关于这种情况的一点背景,或者至少是目标,会有所帮助。
  • 我拥有的 xml 可以基于我不知道的不同变量是动态的。我没有可使用的文档,也没有人知道这是如何工作的。我正在尝试创建一种方法来根据传入的参数潜在地比较不同的 xml 文件。显然也没有已知的机制来解析它。
  • 这将是艰难的,如果它是现实的。 XML 本质上不是严格结构化的,所以要即时分析它,然后将其与其他东西进行比较......哇。

标签: c# xml-parsing linq-to-xml xsd


【解决方案1】:

如果我的问题的答案只有一半

            XDocument doc = XDocument.Load(@"..\..\doc.xml");
        var AnswersScript = doc.Document.Element("root").Elements();

        int count = 0;

        foreach (var node in AnswersScript)
        {
            count++;
            if (doc.Document.Element("root").Element(node.Name).Elements().Count() > 1)
            {
            Console.WriteLine(node.Name);
            }
            else
            {}
        }
        Console.WriteLine(count);
        Console.ReadKey();
    }

这给了你元素节点现在我正试图想一种方法来动态解析这个而不用硬编码深度

【讨论】:

    猜你喜欢
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多