2012-02-13 76 views
1

我已经在我的字符串得到了下面的XML,我使用C#2.0如何检查节点存在于XML和阅读CDATA值

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节点节点,如果没有这样的节点,则返回“valid”,否则我的函数将返回从上面的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

回答

0

用途:

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); 
} 
+0

好,谢谢基里尔,你能不能也请建议如何检查特定节点的字符串存在加载到XmlDocument的面前。由于我的strXML可以是xml字符串以及普通字符串取决于返回什么类型的结果,我需要使用.contains还是有其他方式 – 2012-02-13 10:53:03

+0

@MS,我建议你检查'res.Count'属性,例如:'if(res.Count == 0){...}'。它比用'Contains'检查字符串要好。 – 2012-02-13 11:03:46

+0

但我们如何才能获得(res.Count == 0)上传整个字符串到XmlDocument之前,请建议! – 2012-02-13 11:06:04