0

我正在尝试从 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");


    }
4

2 回答 2

4

如果 XML 中不存在给定元素,foo.Element("someNode")则返回 null。访问.Value时会收到 NullReferenceException。

为了避免出现此 NullReferenceException,您需要检查元素是否不为空。

contextType示例:

var contextType = conn1.Element(ns + "contextType");
if (contextType != null)
{
  textBox15.Text = contextType.Value;
}

更新:

您尝试从根元素加载connectionContext节点。但是这个节点是节点的子节点。您需要先加载此节点:

var source = doc.Root.Element(ns + "source");
var conn1 = source.Element(ns + "connectionContext");
于 2012-05-10T12:01:26.820 回答
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;

问题是您在source中有connectionContext,但尝试在Root中找到它

于 2012-05-10T12:31:44.017 回答