現在、XML フィード データを CMS にインポートする作業を行っていますが、この問題に取り組む方法に苦労しています。
コースの場合、最大 9 人のスタッフが担当できます。それぞれに、名前、電話番号、メールアドレス、および職種があります。インポート用の CMS には、データを保存するために、これら 4 つのフィールドのセットが 9 つあります。これを回避するために、9 人中 5 人のスタッフしかいない場合、もちろん連絡先の XMLnodelist をターゲットにしています。null の場合は空の文字列を持ち、それ以外の場合はフィールドに入力します。
以下のコードでは、cclist は xmlnodelist として定義されており、test1 は International Admissions のすべての内容を文字列として取得します。
私ができるようにしたいのは、拡張された同じ形式を使用して、最大 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;
// 上記の行は test:contact の完全な内容を取得しますが、xsi:type、name、phone、email のレベルまで下げる必要があります
}