我目前正在将XML馈送数据导入我们的CMS,但正在努力解决这个问题。
对于一门课程,它最多可以有 9 名工作人员照顾它。每个人都有姓名、电话号码、电子邮件地址和工作类型。在用于导入的CMS中,我有9组这4个字段,以保存数据。为了解决这个问题,如果 5 名员工中只有 9 名员工,我的目标是当然联系人的 XMLnodelist - 如果它为 null,则有一个空字符串,否则填充字段。
在下面的代码中,cclist 被定义为一个 xmlnodelist,test1 以字符串的形式获取整个国际招生的全部内容。
我希望能够做的是,使用相同的扩展格式,是最多 9 个课程联系人,获取 xmlnodelist 项目的姓名、电子邮件、电话等并将它们分开,以便它们可以成为导入的目标。我尝试使用后代等,但似乎无法单独定位这些,而不是完整的字符串。
任何帮助将不胜感激。谢谢。
.XML
<course>
<dc:description>...</dc:description>
<dc:title>
<![CDATA[ Marketing ]]>
</dc:title>
<learningOutcome>...</learningOutcome>
<test:coursecontacts
<test:contact xsi:type="LeadAcademic">
<test:name
<![CDATA[ Tommy Thompson ]]>
</test:name
<test:phone>0123456789</test:phone>
<test:email>tt@test.com</test:email>
</test:contact>
<test:contact xsi:type="Admissions Administrator">
<test:name>
<![CDATA[ International Admissions ]]>
</test:name>
<test:phone>0123456678</test:phone>
<test:email>ia@test.com</test:email
</test:contact
<test:contact xsi:type="Course Leader">...</test:contact>
<test:contact xsi:type="Admissions Administrator">...</test:contact>
<test:contact xsi:type="Course Administrator">...</test:contact>
</test:coursecontacts>
</course>
C#
protected override FeedCourse MapXmlNodeToEntity(XElement p)
{
var xmlResult = new XmlDocument();
xmlResult.LoadXml(p.ToString());
var test = p.ToString();
var xmlnsManager = new XmlNamespaceManager(xmlResult.NameTable);
xmlnsManager.AddNamespace("ns", "http://xcri.org/profiles/1.2/catalog");
xmlnsManager.AddNamespace("xcriTerms", "http://xcri.org/profiles/catalog/terms");
xmlnsManager.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
xmlnsManager.AddNamespace("xhtml", "http://www.w3.org/1999/xhtml");
xmlnsManager.AddNamespace("dc", "http://purl.org/dc/elements/1.1/");
xmlnsManager.AddNamespace("dcterms", "http://purl.org/dc/terms/");
xmlnsManager.AddNamespace("credit", "http://purl.org/net/cm");
xmlnsManager.AddNamespace("mlo", "http://purl.org/net/mlo");
xmlnsManager.AddNamespace("courseDataProgramme", "http://xcri.co.uk");
xmlnsManager.AddNamespace("test", "http://www.test.com");
var elements = xmlResult.ChildNodes;
var title = xmlResult.DocumentElement.SelectSingleNode("dc:title", xmlnsManager).InnerText;
var description = xmlResult.DocumentElement.SelectSingleNode("dc:description", xmlnsManager).InnerText;
var learningOutcome = xmlResult.DocumentElement.SelectSingleNode("ns:learningOutcome", xmlnsManager).InnerText;
XmlNodeList ccList = xmlResult.DocumentElement.SelectNodes("test:coursecontacts/test:contact", xmlnsManager);
var test1 = ccList.Item(1).InnerText;
上面的行获得了测试:联系人的全部内容,但我需要降低到 xsi:类型、姓名、电话和电子邮件的级别
}
休息了一下,回来决定尝试这个解决方案的 2D 数组。让我得到我需要的价值,所以我很开心。无论如何,谢谢,希望这对其他人有所帮助。
int contactcount = 0;
String[,] contactsArray = new String[9, 3];
XmlNodeList ccList = xmlResult.DocumentElement.SelectNodes("test:coursecontacts/test:contact", xmlnsManager);
var test1 = ccList.Item(1).InnerText;
foreach (XmlNode xn in ccList)
{
contactsArray[contactcount, 0] = xn["test:name"].InnerText + " ("+ xn["@xsi:type"]+")";
contactsArray[contactcount, 1] = xn["test:phone"].InnerText;
contactsArray[contactcount, 2] = xn["test:email"].InnerText;
contactcount++;
}
var test2 = contactsArray[0,0].ToString()+ contactsArray[0, 1].ToString() + contactsArray[0, 2].ToString();
万事如意,
安 迪。