Как проверить, что узел существует в xml и возвращает строковые значения, читая значения CDATA - PullRequest
1 голос
/ 13 февраля 2012

В моей строке ниже xml, и я использую c # 2.0

string strXML ="<?xml version="1.0"?>
<tcm:Error xmlns:tcm="http://www.tridion.com/ContentManager/5.0" ErrorCode="80040329" Category="17" Source="Kernel" Severity="2">
  <tcm:Line ErrorCode="80040329" Cause="false" MessageID="16137">
    <![CDATA[Unable to save Keyword (tcm:0-0-0).]]><tcm:Token>RESID_4574</tcm:Token><tcm:Token>RESID_15309</tcm:Token><tcm:Token>tcm:0-0-0</tcm:Token>
  </tcm:Line>
  <tcm:Line ErrorCode="80040329" Cause="true" MessageID="15200">
    <![CDATA[Name must be unique for items of type: Keyword within this Category and its BluePrint context. Source or sources  of conflict: tcm:236-215788-1024,tcm:237-215788-1024,tcm:241-215788-1024,tcm:243-215788-1024,tcm:423-215788-1024.]]><tcm:Token>RESID_15214</tcm:Token><tcm:Token>RESID_15309</tcm:Token><tcm:Token>RESID_15293</tcm:Token><tcm:Token>tcm:236-215788-1024,tcm:237-215788-1024,tcm:241-215788-1024,tcm:243-215788-1024,tcm:423-215788-1024</tcm:Token>
  </tcm:Line>
  <tcm:Details>
    <tcm:CallStack>
      <tcm:Location>UtilitiesBL.AssertUniqueTitle</tcm:Location>
      <tcm:Location>UtilitiesBL.AssertUniqueTitle</tcm:Location>
      <tcm:Location>KeywordBL.Create</tcm:Location>
      <tcm:Location>XMLState.Save</tcm:Location>
      <tcm:Location>Keyword.Save</tcm:Location>
    </tcm:CallStack>
  </tcm:Details>
</tcm:Error>"

Теперь я хочу написать функцию, которая сначала проверит, есть ли в строке strXML узел узла xml, если естьесли такого узла нет, тогда верните «допустимый», иначе моя функция вернет строковые значения, взятые из приведенного выше xml.

Поэтому мой возвращаемый результат будет « Невозможно сохранить ключевое слово (tcm: 0-0-0)). Имя должно быть уникальным для элементов типа: Ключевое слово в этой категории и ее контекст BluePrint. Источник или источники конфликта: tcm: 236-215788-1024, tcm: 237-215788-1024, tcm: 241-215788-1024,tcm: 243-215788-1024, tcm: 423-215788-1024.", этот текст содержится в XML.

Пожалуйста, предложите !!

Спасибо.

MS

1 Ответ

0 голосов
/ 13 февраля 2012

Использование:

XmlDocument xml = new XmlDocument();
xml.LoadXml(strXML);

XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(xml.NameTable);
xmlnsManager.AddNamespace("tcm", "http://www.tridion.com/ContentManager/5.0");

XmlNodeList res = xml.SelectNodes("//tcm:Line/text()", xmlnsManager);


foreach (XmlNode item in res)
{
    Console.WriteLine(item.InnerText);
}
...