2011-02-01 8 views
1
<component> 
     <Cfac>Default</Cfac> 
     <fbompart>503951302</fbompart> 
     <fbomrev>000</fbomrev> 
     <fbomdesc>CHANNEL, EYEBOLT MOUNT</fbomdesc> 
     <fbommeas>EA </fbommeas> 
     <fbomsource>S</fbomsource> 
     <fjobno>04402-0000</fjobno> 
    </component> 
<component> 
     <Cfac>Default</Cfac> 
     <fbompart>503951305</fbompart> 
     <fbomrev>000</fbomrev> 
     <fbomdesc>TUBE,RND, 3.5 OD X 0.12 WALL HREW</fbomdesc> 
     <fbommeas>EA </fbommeas> 
     <fjobno>04402-0000</fjobno> 
</component> 
    <component> 
     <Cfac>Default</Cfac> 
     <fbompart>503951305</fbompart> 
     <fbomrev>000</fbomrev> 
     <fbomdesc>TUBE,RND, 3.5 OD X 0.12 WALL HREW</fbomdesc> 
     <fbommeas>EA </fbommeas> 
     <fbomsource>M</fbomsource> 
     <fjobno>04402-0000</fjobno> 
</component> 

をXSDを使用せずに、XMLタグの検証を行う必要がある第二の成分で<fbomsource>は、私がそうでなければ、これはエラー「オブジェクトのインスタンスに設定されていないオブジェクト参照を」私を与えるだろう、これを検証する必要が不足しています。私のコードは私を助けてください以下です。が、ここで

XmlDocument doc = new XmlDocument(); 
       string xmldoc = data.ToString(); 
       doc.LoadXml(xmldoc); 
       XmlNodeList _fpartno = doc.GetElementsByTagName("component"); 
       System.Collections.ArrayList Itemslist = new System.Collections.ArrayList(_fpartno.Count); 
       for (int i = 0; i < _fpartno.Count; ++i) 
       { 
        string partno = doc.GetElementsByTagName("fbompart")[i].InnerText; 
        string revision = doc.GetElementsByTagName("fbomrev")[i].InnerText; 
        string facility = doc.GetElementsByTagName("Cfac")[i].InnerText; 
        string Source = doc.GetElementsByTagName("fbomsource")[i].InnerText; // Here I get error 
int count = 0; 
{ 
//here goes some sql query and retuns zero or one 
} 

} 

おかげで、 プラディープ

答えて

-1

あなたはDTDまたはXSDをお持ちでない場合は、何が欠けていないし、そのWELLFORMEDあれば、あなたのXMLが正しいです。

コード内でXMLをチェックする必要があります。 2つのfor-loopsを作成します.1つはヌルでないことを確認し、実際にはその作業を行います。完全なXMLが有効であり、すべての必要な値が存在していることを、私は、確保したい

XmlDocument doc = new XmlDocument(); 
string xmldoc = data.ToString(); 
doc.LoadXml(xmldoc); 
XmlNodeList _fpartno = doc.GetElementsByTagName("component"); 
System.Collections.ArrayList Itemslist = new System.Collections.ArrayList(_fpartno.Count); 
for (int i = 0; i < _fpartno.Count; ++i){ 
    if(doc.GetElementsByTagName("fbomsource")[i] == null){ 
     //this is an error in the XML, throw an Exception or or log it 
    } 
    // more validation if needed 
} 
for (int i = 0; i < _fpartno.Count; ++i){ 
    // actual Code 
} 

よう 何か。あなたがnull-referenceのメソッドInnerTexを呼び出すので、サンプルコードには何らかの種類のNullPointerがあります。

+0

これは – Pradeep

+0

2つのループを使用して話していたサンプルコードを提供してもらえますか? – Pradeep

+0

コードが正しいです。コードにnullcheckを追加するだけでも問題ありません。 doc.GetElementsByTagName( "fbomsource")[i] == null? "":doc.GetElementsByTagName( "fbomsource")[i] –