找不到SelectSingleNode.value时分配string.empty

时间:2017-07-12 02:37:43

标签: c# .net xpath

我将一些参数传递给Web服务,并使用XmlDoc.SelectSingleNode("//Parameter/LastName").Value等将其解析出XML文档。问题是如果节点没有值,我会得到一个对象引用异常。我仍然需要将此作为string.empty参数传递给我的Web服务。我理解我需要处理这个异常但有一种方法可以在一行中完成。例如

string/variable lname = payloadXmlDoc.SelectSingleNode("//Parameter/LastName").Value ?? "";

xslt模板

    <xsl:element name="ssn">
                <xsl:choose>
                  <xsl:when test="count(//Transaction/Parameter[@Name='LastName'])>0">
                     <xsl:value-of select="//Transaction/Parameter[@Name='LastName']/@Value"/>
                   </xsl:when>
                 <xsl:otherwise>
                    <xsl:text></xsl:text>
                 </xsl:otherwise>
              </xsl:choose>
            </xsl:element>

网络服务电话:

response = client.ExecLocalSearch(XmlDoc.SelectSingleNode("//Parameter/LastName").Value, "//Parameter/info").Value);

1 个答案:

答案 0 :(得分:0)

你非常接近!如果找不到节点,则SelectSingleNode()调用将返回null,因此在其上调用.Value会抛出NullReferenceException。但是,您可以使用"safe navigation operator"?.)转发null,以便您的空合并运算符(??)将看到null并返回而是一个空字符串。所以你的第一行看起来像这样:

payloadXmlDoc.SelectSingleNode("//Parameter/LastName")?.Value ?? "";

因此,如果找不到节点,而不是调用.Value,而是使用null代替,??会看到null并返回一个空字符串。