0

我有以下 XML 结构:

<html xmlns ="http://www.w3.org/1999/xhtml" >
 <head>
  . .
 </head>
 <body>
  <div id="1"></div>
  <div id="2"></div>
 </body>
</html>

我使用 linq to xml 访问 id = "2" 的 div。我在 XDocument 中加载了文档:

   XDocument  ndoc = XDcoument.load(path);
   XElement n = new XElement("name","value");
   XNamespace xn = "http://www.w3.org/1999/xhtml";

ndoc.Descendants(xn + "div").Single(p => p.Attribute("id").Value == "1").Add(n);

                             OR

ndoc.Descendants("div").Single(p => p.Attribute("id").Value == "1").Add(n);

我尝试了两种情况,每种情况都有一个异常序列不包含任何元素。这里有什么问题?

4

4 回答 4

0

对我来说,你的例子(有点修改)工作正常:

 var xml = @"<html xmlns ='http://www.w3.org/1999/xhtml' >
 <head>
 </head>
 <body>
  <div id='1'></div>
  <div id='2'></div>
 </body>
</html>";
            XDocument xd = XDocument.Parse(xml);

            XElement n = new XElement("name", "value");
            XNamespace xn = "http://www.w3.org/1999/xhtml";

            xd.Descendants(xn + "div").Single(p => p.Attribute("id").Value == "1").Add(n);

            Console.WriteLine(xd);

输出

<html xmlns="http://www.w3.org/1999/xhtml">
  <head></head>
  <body>
    <div id="1">
      <name xmlns="">value</name>
    </div>
    <div id="2"></div>
  </body>
</html>

所以我真的不明白你的问题。请检查您是否复制所有正确=)

于 2012-07-31T15:51:47.863 回答
0

这应该工作

XNamespace xn = XNamespace.Get("http://www.w3.org/1999/xhtml");
ndoc.Descendants(xn + "div").Single(p => p.Attribute("id").Value == "1").Add(n);
于 2012-07-31T15:27:56.597 回答
0

这将起作用

XDocument ndoc =XDcoument.load(path);
XElement n = new XElement("name", "value");
XNamespace xn = "http://www.w3.org/1999/xhtml";

var item = ndoc.Descendants(xn + "div").FirstOrDefault(p => p.Attribute("id").Value == "1");
if(item!=null)
    item.Add(n);

使用Single方法,如果你确定你的表达中只会出现一个元素。如果有任何机会,可能会出现多个元素,请使用FirstOrDefault()

请记住,这Descendants()将为您提供任何子级别(子级、大子级等)具有匹配条件的所有元素

Elements()方法只会给你直接(直接)孩子。

所以要小心使用。

于 2012-07-31T15:32:19.253 回答
0

你可以试一试这个Xml 库,它应该很容易得到它:

XElement root = XElement.Load(path);
XElement div = root.XPathElement("//div[@id={0}]", 1);
if(null != div) // which it shouldn't be
    div.Add(n);
于 2012-07-31T17:45:28.220 回答