忽略缺少的 XML 元素
本文关键字:XML 元素 | 更新日期: 2023-09-27 18:34:06
我使用以下代码行获取许多XML文件的值。 但是,我注意到某些XML文件缺少"出生日期"元素,该元素抛出的值不能为空。 如果XML文件中缺少元素,有没有办法忽略元素并分配空白值? 如您所见,我有一个循环,然后将这些记录添加到网格中。 如果缺少出生日期元素,它将忽略此记录,并且不会将其添加到数据集中。 我希望它仍然添加名字和姓氏,并将 DOB 留空。
foreach (object o in listBox2.Items)
{
DataSet objDataSet = new DataSet();
objDataSet.ReadXml(folder + "''" + o.ToString(), XmlReadMode.InferSchema);
try
{
List<object> firstNames = objDataSet.Tables["FirstName"].AsEnumerable().Select(r => r["Part"]).ToList();
List<object> lastNames = objDataSet.Tables["LastName"].AsEnumerable().Select(r => r["Part"]).ToList();
List<object> dob = objDataSet.Tables["DateOfBirth"].AsEnumerable().Select(r => r["FullDate"]).ToList();
添加 XML:
<OmdCds xmlns="cds"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cdsd="cds_dt"
xsi:schemaLocation="cds ontariomd_cds.xsd">
<PatientRecord>
<Demographics>
<Names>
<cdsd:LegalName namePurpose="L">
<cdsd:FirstName>
<cdsd:Part>SARAH</cdsd:Part>
<cdsd:PartType>GIV</cdsd:PartType>
<cdsd:PartQualifier>BR</cdsd:PartQualifier>
</cdsd:FirstName>
<cdsd:LastName>
<cdsd:Part>GOMEZ</cdsd:Part>
<cdsd:PartType>FAMC</cdsd:PartType>
<cdsd:PartQualifier>BR</cdsd:PartQualifier>
</cdsd:LastName>
<cdsd:OtherName>
<cdsd:Part>GABRIELA</cdsd:Part>
<cdsd:PartType>GIV</cdsd:PartType>
<cdsd:PartQualifier>BR</PartQualifier>
</cdsd:LastName>
</cdsd:LegalName>
</Names>
<DateOfBirth>
<cdsd:FullDate>1950-03-26</cdsd:FullDate>
</DateOfBirth>
我自己解决了上述问题。 我创建了一个布尔方法来检查该元素是否存在。基于真或假,我要么忽略以获取元素的值。
public bool IsNodeExist(string fileName)
{
bool bState = false;
XmlDocument doc = new XmlDocument();
doc.Load(fileName);
//Select the node with the matching attribute value.
XmlNode nodeToFind;
XmlNamespaceManager namespaceManager = new XmlNamespaceManager(doc.NameTable);
namespaceManager.AddNamespace("cdsd", "cds_dt");
namespaceManager.AddNamespace("cds", "cds");
nodeToFind = doc.DocumentElement.SelectSingleNode("./cds:PatientRecord/cds:Demographics/cds:DateOfBirth", namespaceManager);
if (nodeToFind == null)
{
bState = true;
}
return bState;
}