C# XML操作和注入

C# XML操作和注入,c#,.net,xml,xml-parsing,C#,.net,Xml,Xml Parsing,我有以下XML结构,它是XML文档的一部分: <p:sp xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"> .... .... .... <p:txBody> <a:bodyPr wrap="square" rtlCol="0" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"><a:n

我有以下XML结构,它是XML文档的一部分:

<p:sp xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main">
....
....
....
<p:txBody>
 <a:bodyPr wrap="square" rtlCol="0" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"><a:noAutofit />
 </a:bodyPr>
 <a:lstStyle xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" />
 <a:p xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
   <a:endParaRPr lang="en-US" sz="1200" dirty="0">
   <a:solidFill><a:schemeClr val="tx1" />
   </a:solidFill>
   <a:latin typeface="Verdana" pitchFamily="34" charset="0" />
   <a:ea typeface="Verdana" pitchFamily="34" charset="0" />
   <a:cs typeface="Verdana" pitchFamily="34" charset="0" /></a:endParaRPr>
 </a:p>
</p:txBody>
</p:sp>
其中,shape是一个XMLNode对象,具有上述OuterXml,并使用以下代码进行xml注入:

        XmlDocumentFragment fragment = doc.CreateDocumentFragment();
        string xml = "valid xml";
        fragment.InnerXml = xml;
        txBody.Append(fragment);

但是注入是以错误的形式进行的。

如果xpath给您带来了错误的节点,那么它不够具体。您需要向它提供更多信息以获得所需的节点。IE什么设置您想要的节点与其他节点不同

正如您现在看到的,您是说,给我您找到的第一个节点,该节点在文件中的任意位置都有p名称空间和节点名txBody


您有形状。但是
中的
“//p:txBody”表示从文件的根开始。如果要从形状开始,请使用
/
“//p:txBody”

一样使用LINQ2XML。它完全替代了其他XML API

XElement doc=XElement.Load("yourXML.xml");
XNamespace p = "http://schemas.openxmlformats.org/presentationml/2006/main";
XNamespace s= "http://schemas.openxmlformats.org/drawingml/2006/main";

doc.Elements(p+"txBody").First().Add(new XElement(s+"tagName","value"));
XElement doc=XElement.Load("yourXML.xml");
XNamespace p = "http://schemas.openxmlformats.org/presentationml/2006/main";
XNamespace s= "http://schemas.openxmlformats.org/drawingml/2006/main";

doc.Elements(p+"txBody").First().Add(new XElement(s+"tagName","value"));