我有以下代码:
string name1;
string name2;
string name3;
try
{
name1 = htmlDoc.DocumentNode.SelectSingleNode("//input[@name='name1']").GetAttributeValue("value", "");
name2 = htmlDoc.DocumentNode.SelectSingleNode("//input[@name='name2']").GetAttributeValue("value", "");
name3 = htmlDoc.DocumentNode.SelectSingleNode("//input[@name='name3']").GetAttributeValue("value", "");
}
catch(Exception)
{
name1 = "";
name2 = "";
name3 = "";
}
即使认为我找不到案例,也有可能找不到节点并且函数 SelectSingleNode() 返回 null。但是,如果其中一个给出错误,则所有 3 个字符串都将为空。我可以像下面的代码一样解决它,但我不喜欢像这样连续调用 3 个 try/catch,有没有更好的方法可以做到这一点?
try
{
name1 = htmlDoc.DocumentNode.SelectSingleNode("//input[@name='name1']").GetAttributeValue("value", "");
} catch (Exception)
{
name1 = "";
}
try
{
name2 = htmlDoc.DocumentNode.SelectSingleNode("//input[@name='name2']").GetAttributeValue("value", "");
} catch (Exception)
{
name2 = "";
}
try
{
name3 = htmlDoc.DocumentNode.SelectSingleNode("//input[@name='name3']").GetAttributeValue("value", "");
} catch (Exception)
{
name3 = "";
}
检查以下解决方案可能会对您有所帮助。
try {
if (null != htmlDoc.DocumentNode.SelectSingleNode("//input[@name='name1']") && null != htmlDoc.DocumentNode
.SelectSingleNode("//input[@name='name1']").GetAttributeValue("value", "")) {
name1 = htmlDoc.DocumentNode.SelectSingleNode("//input[@name='name1']").GetAttributeValue("value", "");
} else {
name1 = null;
}
if (htmlDoc.DocumentNode.SelectSingleNode("//input[@name='name2']") && null != htmlDoc.DocumentNode
.SelectSingleNode("//input[@name='name2']").GetAttributeValue("value", "")) {
name2 = htmlDoc.DocumentNode.SelectSingleNode("//input[@name='name2']").GetAttributeValue("value", "");
} else {
name2 = null;
}
if (htmlDoc.DocumentNode.SelectSingleNode("//input[@name='name3']") && null != htmlDoc.DocumentNode
.SelectSingleNode("//input[@name='name3']").GetAttributeValue("value", "")) {
name3 = htmlDoc.DocumentNode.SelectSingleNode("//input[@name='name3']").GetAttributeValue("value", "");
} else {
name3 = null;
}
} catch (Exception e) {
e.printStackTrace();
}