C# 使用Linq to XML在节点之前插入XComment

C# 使用Linq to XML在节点之前插入XComment,c#,xml,linq,xpath,C#,Xml,Linq,Xpath,我需要在每个节点的正上方插入一条xml注释XComment。这和这个问题是一样的。在Linq中,//comment()[以下同级::*[1][self::attribute]]的等价物是什么 我的用例如下所示: <root> <node id="1"> <element>test</element> </node> <!-- comment here: TODO: check if ok --> <node

我需要在每个节点的正上方插入一条xml注释
XComment
。这和这个问题是一样的。在Linq中,
//comment()[以下同级::*[1][self::attribute]]
的等价物是什么

我的用例如下所示:

<root>
 <node id="1">
  <element>test</element>
 </node>
 <!-- comment here: TODO: check if ok -->
 <node id="2">
  <element>is this ok?</element>
 </node>
</root>

测试
这样行吗?

对不起,好像有误会。我有一个xml文件,需要在使用Linq和lambda表达式选择节点后添加
XComment
。这意味着我加载一个xml,在根目录下选择一个节点,然后添加XComment。

我猜您正在读取一个现有文件,并希望在其中添加注释,因此这对您来说应该是可行的:

var doc = new XDocument(
            new XElement("root",
                new XElement("node",
                    new XComment("comment here: TODO: check if ok"),
                    new XElement("element", "is this ok?")
                    )
                )
            );
var xdoc = XDocument.Load("//path/to/file.xml");
var nodes = xdoc.XPathSelectElements("//node");
foreach (var n in nodes)
{
    n.AddBeforeSelf(new XComment("This is your comment"));
}
如果出于某种原因必须使用LINQ而不是XPath,请使用以下命令:

var nodes = xdoc.Descendants().Where(n=>n.Name=="node");
foreach (var n in nodes)
{
    n.AddBeforeSelf(new XComment("This is your comment"));
}
试试这个:-

XDocument xdoc = XDocument.Load(@"YourXMl.xml");
xdoc.Descendants("node").FirstOrDefault(x => (string)x.Attribute("id") == "2")
                        .AddBeforeSelf(new XComment("comment here: TODO: check if ok"));
xdoc.Save(@"YourXML.xml");

在这里,在filter子句中,您需要传递希望在其之前添加注释的条件。请注意,由于我使用了
FirstOrDefault
,如果不匹配,您可能会得到null引用异常,因此您必须在添加注释之前检查null值。

是否希望在每个节点上方添加注释,即id为1,2的节点?或者在任何特定节点之上?@sceiler-很高兴它有帮助!快乐编码:)