2011-04-27 67 views
2

我有一个文件:含有这样的A.XML:XML:如何读取一个文件到另一个

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

</headernode> 

里面的headernode我需要能够动态地加载另一个XML文件的内容称为B.xml包含以下内容

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

我的问题是如何获取a.xml的头节点内的B.xml内容?

谢谢!

+0

见我的回答对XQuery表达式。或者,如果这不是你想要的,请重新登录。 – 2011-04-27 21:51:04

回答

0

好了,我不知道确切的方式做到这一点在C-夏普, 但基本上不会是默认的态度,以

  1. 负荷A.XML
  2. 的DOM
  3. 定位headernode
  4. 负载B.XML到DOM
  5. 从DOM乙解决DOM的根对于B
  6. 副本根
  7. 把它作为孩子到L ocated headernode of DOM A
  8. 重写修改过的DOM A到档案或无论你想要 ?

因为我是Java开发人员我对C-Sharp XML API不是很熟悉,但基本上我已经看到了XMLDocument和XDocument。而当我没有错时,XDocument更新更简单,但都应该以某种方式做到这一点。

这有帮助吗?

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> 
*/ 
2

如果你可以使用LINQ到XML这将是相对简单:

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

doc1.Element("headernode").Add(doc2.Root); 
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> 
*/ 
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"); 
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> 
相关问题