我正在尝试从XML文件中检索值,但我发现某些值为空。
textBox6, textBox7, textBox14
对应的元素属性值为空/ null。错误消息为Null reference error was unhanded
。怎么能解决这个问题?
private void DisplayFile(string path)
{
var doc = XDocument.Load(path);
var ns = doc.Root.GetDefaultNamespace();
var conn = doc.Root.Element(ns + "connection");
textBox1.Text = conn.Element(ns + "sourceId").Value;
var doc1 = XDocument.Load(path);
var ns1 = doc.Root.GetDefaultNamespace();
var conn1 = doc.Root.Element(ns1 + "connectionContext");
}
答案 0 :(得分:4)
如果XML foo.Element("someNode")
中不存在给定元素,则返回null。访问.Value
时,您会收到NullReferenceException。
为了避免这个NullReferenceException,你需要检查元素是否为null。
contextType 的示例:
var contextType = conn1.Element(ns + "contextType");
if (contextType != null)
{
textBox15.Text = contextType.Value;
}
<强>更新强>
您尝试从根元素加载 connectionContext 节点。但是此节点是 source 节点的子节点。您需要先加载此节点:
var source = doc.Root.Element(ns + "source");
var conn1 = source.Element(ns + "connectionContext");
答案 1 :(得分:0)
我发现你的问题试试这个(我使用字符串原因不想制作文本框)
var doc = XDocument.Load("C:\\Test\\stovfl.xml");
var ns = doc.Root.GetDefaultNamespace();
var conn = doc.Root.Element(ns + "connection");
string s1 = conn.Element(ns + "sourceId").Value;
string s2 = conn.Element(ns + "username").Value;
var conn1 = doc.Root.Element("source");
var conn2 = conn1.Element("connectionContext");
string s6 = conn2.Element(ns + "organization").Value;
string s7 = conn2.Element(ns + "field").Value;
string s14 = conn2.Element(ns + "description").Value;
string s15 = conn2.Element(ns + "contextType").Value;
问题是您在源中有 connectionContext ,但尝试在 Root 中找到它