如何在不知道标签名称的情况下一般地解析任何xml文件

时间:2018-10-23 05:31:36

标签: xml linq xpath

所以我的方法是将xmlfile作为参数(这样我就不会知道标记名称等等)并将元素,它们的值以及是否具有属性的值附加到标签上。 。我觉得已经可以回答(尝试查找),但是堆栈溢出的大多数示例都是解析特定的xml文件,您可以在XDocument.Load()文件之后执行linq搜索。我注意到的另一种方法是像这样对doc.descendant中的每个元素进行foreach,但这就像是一团糟(而且甚至没有获得属性及其值)

       XDocument doc = XDocument.Load(TextBox1.Text);

        foreach (XElement element in doc.Descendants())
        {
            Label1.Text += element.Name + element.Value + "\n";

        }

传递任何xml文件的方式是什么,并且基本上只接受元素名称+它们的值以及属性名称+它们的值。

编辑:我感觉我越来越近了。这是我到目前为止更新的内容

XDocument doc = XDocument.Load("http://localhost:56767/File1.xml");
        int i = 0;
        foreach (XElement element in doc.Descendants())
        {
                var child = element.Elements();
                foreach (XElement node in child)
                {
                    BulletedList1.Items.Add(node.Name.LocalName + ": "+node.Value);
                    if (node.HasAttributes)
                    {
                        foreach (XAttribute attributeNode in node.Attributes())
                        {
                            if (!attributeNode.Name.LocalName.Contains("xm"))
                            {
                                BulletedList1.Items.Add(attributeNode.Name.LocalName + ": " + attributeNode.Value);
                            }

                        }
                    }
                    i++;
                }
        }
        Label1.Text += i;

我现在唯一的问题是,后代首先将数据分块(例如,如果我有

<Books>
 <Book>
  <Title>title</Title>
  <Author>author</Author>
 <Book>
 <Book>
  <title>title2</Title>
  <Author>author2</Author>
 <Book>
<Books>

它从最高级别开始,然后向下进行,因为我的所有数据不止一次循环遍历。

1 个答案:

答案 0 :(得分:0)

您可以使用任何DOM解析器将通用XML文档解析为通用数据结构。

听起来您想要的东西比DOM解析器更具体(通用性更低),但不如您从(例如)数据绑定技术获得的东西那么具体。如果是这样,那么您就必须确切说明要应用哪些约束(出于总体普遍性的约束),以及要用于表示结果的数据结构。