2

次のようなファイルを含む A.xml があります。

<?xml version="1.0"?>
<headernode>

</headernode>

headernode の内部では、次の内容を含む B.xml という別の xml ファイルのコンテンツを動的にロードできる必要があります。

<?xml version="1.0"?>
<token>
<a>0</a>
</token>

私の質問は、a.xml のヘッダー ノード内で B.xml の内容を取得するにはどうすればよいですか?

ありがとう!

4

6 に答える 6

3

これはうまくいくようです:

var header = XDocument.Load("a.xml");
var token = XElement.Load("b.xml");

var headerNode = header.Elements("headernode").First();
headerNode.Add(token);

Console.WriteLine(header.ToString()); 
/*
The above prints:

<headernode>
  <token>
    <a>0</a>
  </token>
</headernode>
*/
于 2011-04-27T21:22:11.980 に答える
2

私は他の答えのいくつかを好みますが、これが最初に頭に浮かんだことでした:

var a = new XmlDocument();
a.Load("c:\\a.xml");
var b = new XmlDocument();
b.Load("c:\\b.xml");
var node = a.SelectSingleNode("/headernode");
node.AppendChild(a.ImportNode(b.SelectSingleNode("/token"), true));
a.Save("c:\\c.xml"); 
于 2011-04-27T21:45:15.373 に答える
2

Linq to XML を使用できる場合、これは比較的簡単です。

XDocument doc1 = XDocument.Load("a.xml");
XDocument doc2 = XDocument.Load("b.xml");

doc1.Element("headernode").Add(doc2.Root);
于 2011-04-27T21:22:12.480 に答える
2

この XQuery:

declare function local:copy-append($element as element()) {
   if ($element instance of element(headernode))
   then
      element headernode {$element/@*,doc('B.xml')}
   else
      element {node-name($element)}
         {$element/@*,
          for $child in $element/node()
          return if ($child instance of element())
                 then local:copy-append($child)
                 else $child
         }
};
local:copy-append(/*)

出力:

<headernode>
    <token>
        <a>0</a>
    </token>
</headernode>
于 2011-04-27T21:50:12.383 に答える
0

C-Sharpでそれを行う正確な方法はわかりませんが、基本的にはデフォルトのアプローチではありません

  1. A.xml の DOM をロードする
  2. ヘッダーノードを見つけます
  3. B.xml を DOM にロードする
  4. B の DOM のルートを解決する
  5. DOM B からルートをコピー
  6. DOM A の配置されたヘッダーノードに子として配置します
  7. 変更された DOM A をファイルまたは必要な場所に書き換えますか?

私は Java 開発者なので、C-Sharp XML API にはあまり詳しくありませんが、基本的には XMLDocument と XDocument を見てきました。そして、私が間違っていなければ、XDocument の方が新しくてシンプルですが、どちらも何らかの方法でそれを行う必要があります。

これは役に立ちますか?

于 2011-04-27T21:09:12.550 に答える
0
//myXmlToInsert.xml
/*
<?xml version="1.0"?>
<root>
  <child1></child1>
  <child2></child2>
  <token>
      <a>0</a>
  </token>
</root>
*/

//code
XDocument xmlDoc = new XDocument();
xmlDoc.Declaration = new XDeclaration("1.0", "utf-8", "yes");
xmlDoc.Document.Add(new XElement("rootNode",new XElement("headerNode"), new XElement("bodyNode")));
XDocument xmlToInsert = XDocument.Load(@"c:\myXmlToInsert.xml");
XElement tokenNode = xmlToInsert.Root.Element("token");

xmlDoc.Root.Element("headerNode").Add(tokenNode);    

//Result 
/*
<?xml version="1.0"?>
<root>
  <headerNode>
    <token>
       <a>0</a>
    </token>
   </headerNode>
   <bodyNode>
   </bodyNode>
</root>
*/
于 2011-04-27T21:29:51.853 に答える