2011-08-11 73 views
0

我有兩個Xml文件,我將調用第一個Input Xml和第二個Template XmlTemplate Xml是一個靜態Xml,我想驗證Template Xml是否是Input Xml的子集。我如何在C#中實現這一點?如何驗證一個xml是否是C#中另一個子集的子集

子集我的意思是我想驗證Template Xml中提到的Xml標記和屬性是否存在於具有相同值的Input Xml中。

+1

我會reccommed使用XML架構文件(XSD),除非您沒有選擇。請參閱:http://en.wikipedia.org/wiki/XML_schema – MadcoreTom

+0

我想確保具有特定值的特定標籤和屬性存在,但不在意另外,XML中已經有了一個我無法修改的XSD,也許我錯過了一些東西,你能否詳細說明我該如何使用XSD – Rishabh

回答

0

Conatains是非常開放的結束。關於標籤和屬性的命令......它必須以相同的順序以及標籤深度。假設只有來自模板的匹配標籤(如果它存在於xml中)(與深度無關),則可以使用以下擴展方法。

public static bool SupportsTemplate(this XmlDocument xmlDoc, XmlNode template) { 
     bool found = true; 
     var nodes = template.ChildNodes; 
     foreach(XmlNode node in nodes){ 
      found = xmlDoc.SelectSingleNode("//" + node.Name) == null ? false : true; 
      if (!found) break; 
      if (node.HasChildNodes) 
       found = xmlDoc.SupportsTemplate(node); 
      if (!found) break; 
     } 
     return found; 
    } 

尚未測試&不優化的代碼(調用像xmlDoc.SupportsTemplate(template.DocumentElement)。實施類似的東西,你可以擴展這一檢查屬性爲好。

相關問題