1

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>

p:txBodyを選択し、最後にa:pを挿入したいのですが、次のコードを使用していますが、受信しているtxBodyは正しいものではありません。形状オブジェクト:

        XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
        nsmgr.AddNamespace("p", "http://schemas.openxmlformats.org/presentationml/2006/main");
        XmlNode txBody = shape.SelectSingleNode("//p:txBody", nsmgr);

shapeは、上記の OuterXml を持つ XMLNode オブジェクトであり、xml インジェクションに次のコードを使用します。

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

しかし、注射は間違った形で行われています。

4

2 に答える 2

0

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"));
于 2012-10-10T18:51:58.217 に答える
0

間違ったノードを取得している場合、xpath は十分に具体的ではありません。必要なノードを取得するには、より多くの情報を提供する必要があります。つまり、他のノードとは異なるノードを設定するものは何ですか?

あなたが今持っているように、ファイルのどこかに p 名前空間とノード名 txBody を持つ最初のノードを見つけてくださいと言っています。

あなたには形があります。しかし、//in"//p:txBody"はファイルのルートから開始すると言っています。形状から開始する場合は、.//そのように使用します".//p:txBody"

于 2012-10-10T18:42:29.333 に答える