5

確かにこれは簡単ですが、現時点では私をほのめかしています。XDocumentの最上位ノードをXElementとして返したいのですが、その子孫は返しません。

以下の線に沿って何かを探していますが、それは機能しません

XElement myElement = myXDocument.Root.Element();

返品のみを希望

<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>
4

2 に答える 2

8

これを行うには2つの方法があります。

  • の浅いコピーを作成し、XElement属性を追加するか、
  • のディープコピーを作成し、XElementサブ要素を削除します。

最初の方法は、特に要素に多数の子ノードがある場合、無駄が少なくなります。

これが最初の方法です:

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

2番目の方法は次のとおりです。

XElement res = new XElement(myElement);
res.RemoveNodes();
于 2012-09-20T14:20:34.847 に答える
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();
    }
}
于 2012-09-20T15:14:30.653 に答える