在C#中查询XML Linq

时间:2017-01-26 08:44:56

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

我想使用C#从XML(也有xsd文件)中检索数据。我的代码有什么问题: 我的Xml文件看起来像这样。

<Model_1 xmlns="http://www.3ds.com/xsd/3DXML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.3ds.com/xsd/3DXML ./3DXML.xsd">
    <Header>
        <item></item>
        <item1></item1>
        <item2></item2>
    </Header>
    <Product>
        <otheritem></otheritem>
        <otheritem1></otheritem1>
        <otheritem2></otheritem2>
    </Product>
    <Books>
        <otheritem></otheritem>
        <otheritem1></otheritem1>
        <otheritem2></otheritem2>
    </Books>
</Model_1>

... C#

     XDocument xdoc = Document.Load("document.xml")                                                           var items = from item in xdoc.Descendants("Header")
                            select new
                            {
                                _Item= item.Element("Item").Value,
                                _Item1= item.Element("Item1").Value,
                                _Item2= item.Element("Item2").Value,         
                            };

                foreach (var item in items)
                {
                    Item= item._Item;
                    Item1 = item._Item1;
                    Item2 = item.Item2;
                }
 Console.WriteLine("show me :" + Item+ " + " + Item1 + " + " + Item2);

如何从标题中提取项目,而不是从产品或书籍中提取项目?

1 个答案:

答案 0 :(得分:0)

您需要使用命名空间:

var ns = xdoc.Root.GetDefaultNamespace();
var header = xdoc.Root.Element(ns + "Header");

另请注意 - 您的xml中包含小写item,而不是Item

Item = (string)header?.Element(ns + "item");
Item1 = (string)header?.Element(ns + "item1");
Item2 = (string)header?.Element(ns + "item2");