忽略元素LINQ C#中空属性的值

时间:2012-05-10 11:56:05

标签: c# xml visual-studio linq

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


    }

2 个答案:

答案 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 中找到它