假设我有两个XML文件。
第一个XML文件:
<?xml version="1.0"?>
<AccessRequest xml:lang="en-US">
<AccessLicenseNumber>Your_License</AccessLicenseNumber>
<UserId>Your_ID</UserId>
<Password>Your_Password</Password>
</AccessRequest>
第二个XML文件:
<?xml version="1.0"?>
<RatingServiceSelectionRequest xml:lang="en-US">
<CustomerContext>Rating and Service</CustomerContext>
</RatingServiceSelectionRequest>
现在,当我将它们合并为两个时,我希望输出如下:
<?xml version="1.0"?>
<AccessRequest xml:lang="en-US">
<AccessLicenseNumber>Your_License</AccessLicenseNumber>
<UserId>Your_ID</UserId>
<Password>Your_Password</Password>
</AccessRequest>
<?xml version="1.0"?>
<RatingServiceSelectionRequest xml:lang="en-US">
<CustomerContext>Rating and Service</CustomerContext>
</RatingServiceSelectionRequest>
当我使用google上的常用方法合并这两个文件时,版本号等正在被吃掉,而且RatingServiceSelectionRequest节点最终成为AccessRequest节点的一部分,这显然不是我想要的。
我如何在C#.Net中处理此问题?
注意:我想要它的原因是因为我正在使用的这个API正在请求它,所以我猜没有两种方法。
答案 0 :(得分:4)
你不能有两个顶级节点
<强> <AccessRequest>
强>
和
<强> <RatingServiceSelectionRequest>
强>
在格式良好的XML文件中 - 根据定义 - 格式良好的XML文件具有一个且只有一个根节点。
此外,您不能在单个文件中包含两个XML处理说明 <?xml version="1.0"?>
- 大多数情况下,文件中间不会有一个。
所以你需要引入一个新的“人工”根,或者在另一个根元素之下粘贴XML。
如果您确实必须保留该格式,那么您只需将这两个文件连接为字符串:
string file1Contents = File.ReadAllText(@"file1.xml");
string file2Contents = File.ReadAllText(@"file2.xml");
File.WriteAllText(@"merged.xml", file1Contents + file2Contents);
这里没有XML魔法......
答案 1 :(得分:0)
xml标头的“丢失”(btw通常是所需的特性),可能是使用XML / DOM感知方法进行合并的结果。相反,只需将文件作为纯文本读取,然后按顺序写入。
正如Marc S指出的那样,这将导致XML文件无效,但如果这是你想要/需要的......
在重新阅读问题时,关于第二个文件的内容被插入到前一个文件的节点末尾的“抱怨”提示您希望保留一个有效的XML文件,尽管这个数据存在于数据中从第二个文件未集成到此节点。因此,您肯定需要引入一个额外的节点作为组合结果的根节点。 (目前这些文件都有自己的根元素。)
答案 2 :(得分:0)
此API看起来很熟悉;)
我们在这里使用相同的,他们确实需要一个接一个。我假设你也使用API提供的.xsd来生成你的请求类。
所有这一切,我们创建了一个“帮助器”类,它将请求(访问和速率)序列化为字符串,连接字符串并将结果作为字节数组发布到目标URL。
我们课程的突破是:
助手类 - &gt;序列化一个对象并将其作为字符串返回(在本例中为xml字符串)
客户端类 - &gt;创建一个通过WebRequest发布到目标系统的字节数组。