我将一些参数传递给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);
答案 0 :(得分:0)
你非常接近!如果找不到节点,则SelectSingleNode()
调用将返回null
,因此在其上调用.Value
会抛出NullReferenceException
。但是,您可以使用"safe navigation operator"(?.
)转发null
,以便您的空合并运算符(??
)将看到null
并返回而是一个空字符串。所以你的第一行看起来像这样:
payloadXmlDoc.SelectSingleNode("//Parameter/LastName")?.Value ?? "";
因此,如果找不到节点,而不是调用.Value
,而是使用null
代替,??
会看到null
并返回一个空字符串。