在C#中返回没有后代的XElement

5

当然,这很简单,但我目前还不能理解。我想返回XDocument的顶级节点作为XElement,但不返回任何子节点:

希望找到以下内容,但它不起作用:

XElement myElement = myXDocument.Root.Element();

WANT TO RETURN ONLY

<Response xmlns="someurl" xmlnsLi="thew3url">
</Response>

来源

 <Response xmlns="someurl" xmlnsLi="thew3url">   
    <ErrorCode></ErrorCode>            
    <Status>Success</Status>    
    <Result>
    <Manufacturer>
                <ManufacturerID>46</ManufacturerID>
                <ManufacturerName>APPLE</ManufacturerName>
    </Manufacturer>    
    </Result> 
 </Response>
2个回答

9

有两种方法可以实现这个:

  • 制作XElement的浅拷贝,并添加属性,或者
  • 制作XElement的深拷贝,并删除子元素。

第一种方法是更少浪费的,特别是当元素有许多子节点时。

这是第一种方法:

XElement res = new XElement(myElement.Name);
res.Add(myElement.Attributes().ToArray());

这里是第二种方法:
XElement res = new XElement(myElement);
res.RemoveNodes();

完美,我知道它会很简单 :) - BikerP

1
class Program
{
    static void Main(string[] args)
    {
        string xml = "<Response xmlns=\"someurl\" xmlnsLi=\"thew3url\">"
                   + "<ErrorCode></ErrorCode>"
+ "<Status>Success</Status>"
+ "<Result>"
+ "<Manufacturer>"
            + "<ManufacturerID>46</ManufacturerID>"
            + "<ManufacturerName>APPLE</ManufacturerName>"
+ "</Manufacturer>"
+ "</Result>"
+ "</Response>";



        XmlDocument doc = new XmlDocument();
        doc.LoadXml(xml);

        var root = doc.FirstChild;

        for (int i = root.ChildNodes.Count - 1; i >= 0; i--)
        {
            root.RemoveChild(root.ChildNodes[i]);
        }


        Console.WriteLine(doc.InnerXml);
        Console.ReadKey();
    }
}

OP要求使用XDocument(Linq to Xml)来完成此操作,而不是旧的xml类。 - Andy
代码是实现相同结果的另一种选择,贬低它有什么意义呢? - Larry
这并没有回答他如何使用xelement来完成它的问题。虽然可以使用那些类来实现,但为什么你的答案只包括完全不同的API呢? - Andy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接