c# linq to xml 添加节点

c# linq to xml 添加节点,第1张

string xml = "<Path><Background FileName=\"AAA\"></Background><Background FileName=\"BBB\"></Background><Background FileName=\"CCC\"></Background></Path>"

XElement el = XElement.Parse(xml)

XElement newEl = new XElement("image", "d:/1.jpg", new XAttribute("name", "1.jpg"))

el.Elements("Background").Where(e=>e.Attribute("FileName").Value=="AAA").First().Add(newEl)

Console.WriteLine(el)

这个应该是Linq to Xml吧,Linq to Sql是数据库的

/////////创建xml

string path = Server.MapPath("App_Data/new.xml")//设置xml文件存放的目录

        //使用LINQ创建xml文件的内容

        XDocument doc = new XDocument(

            new XDeclaration("1.0", "utf-8", "yes"),

            new XElement("People",

                new XElement("Person",

                    new XAttribute(":IDCard", "22030219771012***"),

                    new XComment("身份z号是唯一的"),

                    new XElement("Name", "张三"),

                    new XElement("Sex", "男"),

                    new XElement("Old", 20)

                    )

                )

            )

        doc.Save(path)//保存为new.xml文件

        

        

        

        

        

///////读取xml并查

string xmlFilePath = Server.MapPath("App_Data/new.xml")//xml文件存放的路径

        XElement xes = XElement.Load(xmlFilePath)//加载xml文件

        //查询指定名称的元素

        IEnumerable<XElement> elements = from ee in xes.Elements("Person")

                                         where ee.Element("Name").Value == "李四"

                                         select ee

        foreach (XElement xe in elements)//将查询到的元素输出

        {

            Response.Write(xe.Name.LocalName+":"+xe.Attribute("IDCard").Value+"<br/>")

        }

        

        

        

        

        

////////查询指定名称的元素

  string xmlFilePath = Server.MapPath("App_Data/new.xml")//xml文件存放的路径

        XElement xes = XElement.Load(xmlFilePath)//加载xml文件

        //查询指定名称的元素

            var elements = from ee in xes.Elements("Person")

                           where ee.Attribute("IDCard").Value == idcard 

                           select new

                           {

                               姓名 = ee.Element("Name").Value,

                               性别 = ee.Element("Sex").Value,

                               年龄 = ee.Element("Age").Value,

                               身份z号 = ee.Attribute("IDCard").Value

                           }

XDocument x = XDocument.Load("Version.xml", LoadOptions.SetBaseUri)

var queryElementNs = "http://www.dynastech.com/xmtp/disco#update"

XElement query = x.Root.Element(XName.Get("query", queryElementNs))

if(query == null)

{

    Console.WriteLine("Sorry, but the specified tag is not found.")

}

else

{

    XAttribute Version = query.Attribute("version")

    Console.WriteLine(Version == null ? "[ATTRIBUTE NOT FOUND]" : Version.Value)

}

主要三个问题:

x 是个xml文档,不是 xml 根元素。要定位到 xml 根元素,先定位到 Root 属性,而不是上来就去查找x.Element。

你查的xml元素“query”是带xmlns的,查找元素的时候要把命名空间带上去,用XName包含进命名空间:

XName.Get("query", queryElementNs)

而不是直接使用字符串“query”,它默认不包含命名空间。

应该是

query.Attribute("version") //

而不是

query.Attribute("Version")

注意xml很多地方是区分大小写的。

最后就是,永远不要信任外部的数据源:你怎么可能保证xml里肯定有query这个标签?所以一定要始终判断查出来的结果是不是空。这样也方便你查错。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/7852101.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存