【发布时间】:2018-03-23 00:04:48
【问题描述】:
有以下代码,这是新的,所以请善待,它看起来很笨重,并且没有返回我期望它返回的内容。基本上,我正在尝试将 Operator、Password 和 Group 值的节点读入 vars 并通过元组返回。
public static Tuple<string, string, string> ReadSecurity()
{
XmlReader reader = XmlReader.Create("Operator.xml");
string sOperator = "";
string sPassword = "";
string sGroup = "";
while (reader.Read())
{
if(reader.NodeType == XmlNodeType.Element && reader.Name == "Security")
{
while (reader.NodeType != XmlNodeType.EndElement)
{
reader.Read();
if (reader.NodeType == XmlNodeType.Text)
{
sOperator = reader.Value;
}
reader.Read();
if (reader.NodeType == XmlNodeType.Text)
{
sPassword = reader.Value;
}
reader.Read();
if (reader.NodeType == XmlNodeType.Text)
{
sGroup = reader.Value;
}
}
}
}
return Tuple.Create(sOperator, sPassword, sGroup);
}
似乎每次都缺少第一个值,但不知道如何更改,在线教程假设比我目前拥有的知识多得多。
例如:
当前迭代见下文(是的,我知道密码应该加密)。
<?xml version="1.0" encoding="utf-8"?>
<Security ver="beta">
<Operator>Ted</Operator>
<Password>password</Password>
<Group>op</Group>
</Security>
【问题讨论】:
-
向我们展示一个 xml 示例。
-
以后请添加附加信息作为问题的编辑而不是 cmets。
-
如果操作员和密码在同一个文件中,需要一些样本。
-
在文件中流式传输,查找每个
<Security>元素,并使用XElement.ReadFrom()查找它们将会容易得多。参见例如How to read large xml file without loading it in memory and using XElement 和 Get the EndElement Node of an XElement. -
旁注:“...密码应该加密”在大多数情况下是一种糟糕的做法,尤其是在实施自制身份验证时...但您可能也已经知道了。