【发布时间】:2018-10-28 23:11:41
【问题描述】:
我必须创建一个带有 xml 标头的文件,然后我必须放入普通数据,就像这样:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Header>
<Algorithm>alg</Algorithm>
<nod2>aaa</nod2>
<nod3>bbb</nod3>
<node>
<User>
<Email />
<SessionKey />
</User>
</node>
</Header>
Data of the file....
我已经有了将其写入文件的代码。
该部分的代码:
private void setHeader(FileStream output, string nod2, string nod3, string )
{
XmlDocument doc = new XmlDocument();
XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", "yes");
doc.AppendChild(docNode);
XmlNode header = doc.CreateElement("Header");
doc.AppendChild(header);
XmlNode algorithm = doc.CreateElement("Algorithm");
algorithm.InnerText = "alg";
header.AppendChild(algorithm);
XmlNode node2= doc.CreateElement("nod2");
node2.InnerText = nod2;
header.AppendChild(node2);
XmlNode node3= doc.CreateElement("nod3");
node3.InnerText = nod3;
header.AppendChild(node3);
XmlNode node= doc.CreateElement("node");
header.AppendChild(node);
XmlNode user1 = doc.CreateElement("User");
node.AppendChild(user1);
XmlNode mail = doc.CreateElement("Email");
user1.AppendChild(mail);
XmlNode sessionKey = doc.CreateElement("SessionKey");
user1.AppendChild(sessionKey);
doc.Save(output);
}
它工作得很好,但是当我想阅读它时
private void readHeader(FileStream input, out string algorithm)
{
XmlDocument doc = new XmlDocument();
doc.Load(input);
}
当“文件的数据...”启动时出现错误:“根级别的数据无效”。 有没有办法在整个 xml 之后处理数据,或者让我将数据添加为节点?
【问题讨论】:
-
“效果很好” -- 你怎么知道?它甚至不编译。请向我们展示您的实际代码。如果问题顶部的示例“XML”是您真正生成的,则它不是有效的 XML。
-
我将它用于加密和解密文件的程序。 xml部分应该描述加密设置,在原始文件的加密数据之后并且它不在任何节点内。因此,当我生成文件并用记事本打开它时,它看起来就像我被要求做的那样,就像顶部的 xml 一样。节点外的数据是否无效?如果是,是否有一种简单的方法来读取有效 xml 的标头并忽略不在节点中的数据?
-
"它不在任何节点内" -- 如果是这样,您无法使用 XML 解析器解析文件。您有两个选择: 1. 分别解析标头; 2:将数据放在XML本身的CDATA块中:
<File><Header>...</Header><Data><![CDATA[ ... ]]></Data></File>。我认为你会对加密数据进行 Base64 编码。 -
是的,you'll need to encode the encrypted data 在 CDATA 块中。这是迄今为止首选的方法。
-
我也希望将它放在一个节点中,但我被要求以其他方式进行:/ 感谢您的帮助 :)