XML:如何将一个文件读入另一个文件

发布于 2024-11-03 20:51:20 字数 354 浏览 0 评论 0原文

我有一个文件: A.xml 包含如下内容:

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

</headernode>

在 headernode 内部,我需要能够动态加载另一个名为 B.xml 的 xml 文件的内容,其中包含以下内容

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

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

谢谢!

I have a file: A.xml containing something like this:

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

</headernode>

Inside of the headernode i need to be able to dynamically load the contents of another xml file called B.xml containing the following

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

My question is how do i get the contents of B.xml inside the header node of a.xml?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

与之呼应 2024-11-10 20:51:20

这似乎有效:

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

This seems to work:

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>
*/
羁〃客ぐ 2024-11-10 20:51:20

如果您可以使用 Linq to XML,这将相对简单:

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

doc1.Element("headernode").Add(doc2.Root);

If you can use Linq to XML this would be relatively simple:

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

doc1.Element("headernode").Add(doc2.Root);
深府石板幽径 2024-11-10 20:51:20

我更喜欢其他一些答案,但这是我首先想到的:

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"); 

I prefer some of the other answers, but this was the first thing that came to mind:

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"); 
誰認得朕 2024-11-10 20:51:20

此 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>

This 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(/*)

Output:

<headernode>
    <token>
        <a>0</a>
    </token>
</headernode>
太阳哥哥 2024-11-10 20:51:20

嗯,我不知道在 C-Sharp 中具体的操作方法,
但基本上不会是

  1. 加载 A.xml 的 DOM 的
  2. 默认方法定位 headernode
  3. 将 B.xml 加载到 DOM
  4. 解析 B 的 DOM 根
  5. 从 DOM B 复制根
  6. 将其作为子级放置到 DOM A 的定位 headernode
  7. 重写修改 DOM A 到文件或任何你想要的地方

由于我是一名 Java 开发人员,因此我对 C-Sharp XML API 不太熟悉,但基本上我在那里见过 XMLDocument 和 XDocument。当我没有错时,XDocument 更新且更简单,但两者都应该以某种方式做到这一点。

这有帮助吗?

Well, I do not know the exact way to do it in C-Sharp,
but basically wouldn't be the default approach to

  1. load the DOM of A.xml
  2. locate the headernode
  3. load B.xml into DOM
  4. resolve the root of DOM for B
  5. copy root from DOM B
  6. put it as child to the located headernode of DOM A
  7. rewrite modified DOM A to file or whereever you want
    ?

Since Im a Java Developer I am not very familiar with the C-Sharp XML API but basically I've seen XMLDocument and XDocument there. And when I'm not wrong XDocument is newer and simpler, but both should do it somehow.

Does this help?

缱倦旧时光 2024-11-10 20:51:20
//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>
*/
//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>
*/
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文