C#XmlReader对从read()函数赋值感到困惑
有下面的代码,这是新的,所以要友好,它看起来笨重,并没有返回我期望它返回的。基本上,我试图将操作符、密码和组值的节点读入变量,并通过元组返回C#XmlReader对从read()函数赋值感到困惑,c#,xml,tuples,xmlreader,C#,Xml,Tuples,Xmlreader,有下面的代码,这是新的,所以要友好,它看起来笨重,并没有返回我期望它返回的。基本上,我试图将操作符、密码和组值的节点读入变量,并通过元组返回 public static Tuple<string, string, string> ReadSecurity() { XmlReader reader = XmlReader.Create("Operator.xml"); string sOperator = ""; string sPass
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);
}
公共静态元组ReadSecurity()
{
XmlReader=XmlReader.Create(“Operator.xml”);
字符串sOperator=“”;
字符串sPassword=“”;
字符串sGroup=“”;
while(reader.Read())
{
if(reader.NodeType==XmlNodeType.Element&&reader.Name==“安全性”)
{
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;
}
}
}
}
返回Tuple.Create(sOperator、sPassword、sGroup);
}
似乎每次都缺少第一个值,但不知道如何改变这一点,在线教程假设的知识比我目前拥有的要多得多
例如:请参阅下面的当前迭代(是的,我知道密码应该加密)
特德
密码
op
在方法的开头放一个断点,然后按F11一步一步地运行它。您将看到XmlReader
读取Whitespace
节点。请参见调试>窗口>自动或本地窗口
您必须忽略这些空白
节点,并正确导航到类型为Text
的节点以读取其值。您还需要正确处理开始和结束标记
因此,代码可能如下所示:
using (var reader = XmlReader.Create("Operator.xml"))
{
string sOperator = "";
string sPassword = "";
string sGroup = "";
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element && reader.Name == "Operator")
{
reader.Read(); // move to Text node
sOperator = reader.Value;
}
if (reader.NodeType == XmlNodeType.Element && reader.Name == "Password")
{
reader.Read(); // move to Text node
sPassword = reader.Value;
}
if (reader.NodeType == XmlNodeType.Element && reader.Name == "Group")
{
reader.Read(); // move to Text node
sGroup = reader.Value;
}
}
return Tuple.Create(sOperator, sPassword, sGroup);
}
然而,
XmlReader
类有许多有用的方法。如果你正确地使用它们,你可以使它的使用变得简单和愉快
using (var reader = XmlReader.Create("Operator.xml"))
{
reader.ReadToFollowing("Operator");
var sOperator = reader.ReadElementContentAsString();
reader.ReadToFollowing("Password");
var sPassword = reader.ReadElementContentAsString();
reader.ReadToFollowing("Group");
var sGroup = reader.ReadElementContentAsString();
return Tuple.Create(sOperator, sPassword, sGroup);
}
给我们看一个xml示例。以后请添加其他信息作为对问题的编辑,而不是注释。如果操作符和密码在同一个文件中,则需要一些示例。在文件中进行流式处理、查找每个
元素以及使用XElement.ReadFrom()
查找这些元素会容易得多。请参见示例和旁注:“……密码应加密”对于大多数情况来说都是糟糕的做法,尤其是对于实现自制身份验证而言。。。但你可能已经知道了。
using (var reader = XmlReader.Create("Operator.xml"))
{
reader.ReadToFollowing("Operator");
var sOperator = reader.ReadElementContentAsString();
reader.ReadToFollowing("Password");
var sPassword = reader.ReadElementContentAsString();
reader.ReadToFollowing("Group");
var sGroup = reader.ReadElementContentAsString();
return Tuple.Create(sOperator, sPassword, sGroup);
}