Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中为空字段添加破折号的最佳方法#_C#_Xml_Xpath - Fatal编程技术网

C# 在C中为空字段添加破折号的最佳方法#

C# 在C中为空字段添加破折号的最佳方法#,c#,xml,xpath,C#,Xml,Xpath,我从一些来自C#代码中XML的字段填充了pdf。 我必须为每个空字段加上破折号(-)。我是否应该每次检查字段是否为空,并将破折号放在破折号上,或者有一种方法可以同时检查所有字段? 最好的方法是什么,因为我有50个字段要检查 这就是我现在的代码: dt.LastName = (dt.LastName == null ? null : (string)individual.XPathSelectElement("AIndividual[@Type='Co-Applicant']/GivenNa

我从一些来自C#代码中XML的字段填充了pdf。 我必须为每个空字段加上破折号(-)。我是否应该每次检查字段是否为空,并将破折号放在破折号上,或者有一种方法可以同时检查所有字段? 最好的方法是什么,因为我有50个字段要检查

这就是我现在的代码:

   dt.LastName = (dt.LastName == null ? null : (string)individual.XPathSelectElement("AIndividual[@Type='Co-Applicant']/GivenName/LastName"));
   if (dt.LastName == null)
       dt.LastName = "-";

我假定
dt.LastName
最初来自另一个单独元素的同一文档。在这种情况下,您可以使用XPath选择器和属性设置器数组来处理文档。(请注意,下面的代码只是一个粗略的草图,甚至没有经过编译):

公共类申请人
{
公共字符串LastName{get;set;}
}
公共作废流程(XmlElement申请、申请人)
{
变量选择器=新[]{
新{
Setter=新动作((t,v)=>t.LastName=v),
XPath=“GivenName/LastName”
}
};
foreach(选择器中的变量选择器)
{
var node=application.SelectSingleNode(“AIndividual[@Type='primaryAppender']/”+selector.XPath)??
application.SelectSingleNode(“AIndividual[@Type='coapplicator']/”+selector.XPath);
selector.Setter(申请人,节点==null?”-“:node.Value);
}
}

变量的类型是什么
dt
?在你的代码中,你做同样的事情两次,特别是在第一行。你可以像这样在一行中完成这一切。dt.LastName=(dt.LastName==null?-“:(字符串)individual.XPathSelectElement(“AIndividual[@Type='Co-applicator']]/GivenName/LastName”);如果
dt.LastName
的原始值为null,则不会从xml中获取新值,但如果设置了
dt.LastName
的原始值,则会从xml中覆盖它。这似乎有点倒退。您能验证预期的逻辑吗?@umbreon222当它为空时,它会给我空值,而不是(-)@Alma:这是因为当
dt.LastName
的原始值为
null
时,它只会给“-”。如果xml查询返回null,则不使用“-”。当
dt.LastName
的原始值为空时,您能否验证现有代码为何避免xml查询?
public class Applicant
{
    public string LastName { get; set;}
}

public void Process(XmlElement application, Applicant applicant)
{
    var selectors = new[] {
        new { 
                  Setter = new Action<Applicant, string>((t,v) => t.LastName = v), 
                  XPath = "GivenName/LastName"
            }
    };

    foreach(var selector in selectors)
    {
        var node = application.SelectSingleNode("AIndividual[@Type='PrimaryApplicant']/" + selector.XPath) ??
                        application.SelectSingleNode("AIndividual[@Type='CoApplicant']/" + selector.XPath);

        selector.Setter(applicant, node == null ? "-" : node.Value);
    }
}