C# 需要在不使用xsd的情况下进行xml标记验证 违约 503951302 000 有眼螺栓安装槽 每个 s 04402-0000 违约 503951305 000 管道,RND,外径3.5 X壁厚0.12 每个 04402-0000 违约 503951305 000 管道,RND,外径3.5 X壁厚0.12 每个 M 04402-0000

C# 需要在不使用xsd的情况下进行xml标记验证 违约 503951302 000 有眼螺栓安装槽 每个 s 04402-0000 违约 503951305 000 管道,RND,外径3.5 X壁厚0.12 每个 04402-0000 违约 503951305 000 管道,RND,外径3.5 X壁厚0.12 每个 M 04402-0000,c#,xml,C#,Xml,在这里,在第二个组件中,缺失,我需要验证这一点,否则会出现“对象引用未设置为对象实例”错误。我的代码在下面,请帮助我 <component> <Cfac>Default</Cfac> <fbompart>503951302</fbompart> <fbomrev>000</fbomrev> <fbomdesc>CHANNEL, EYEB

在这里,在第二个组件中,
缺失,我需要验证这一点,否则会出现“对象引用未设置为对象实例”错误。我的代码在下面,请帮助我

 <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>
XmlDocument doc=新的XmlDocument();
字符串xmldoc=data.ToString();
doc.LoadXml(xmldoc);
XmlNodeList_fpartno=doc.GetElementsByTagName(“组件”);
System.Collections.ArrayList Itemslist=新的System.Collections.ArrayList(\u fpartno.Count);
对于(int i=0;i<\u fpartno.Count;++i)
{
string partno=doc.GetElementsByTagName(“fcompart”)[i].InnerText;
string revision=doc.GetElementsByTagName(“fbomrev”)[i].InnerText;
字符串facility=doc.GetElementsByTagName(“Cfac”)[i].InnerText;
string Source=doc.GetElementsByTagName(“fbomsource”)[i].InnerText;//这里我得到一个错误
整数计数=0;
{
//下面是一些sql查询并返回0或1
}
}
谢谢,
Pradeep

如果您没有DTD或XSD,则不会丢失任何内容,如果XML格式正确,则XML是正确的

您必须检查代码中的XML。做两个for循环,一个检查notnull,一个检查实际工作。 差不多

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
}

}
XmlDocument doc=新的XmlDocument();
字符串xmldoc=data.ToString();
doc.LoadXml(xmldoc);
XmlNodeList_fpartno=doc.GetElementsByTagName(“组件”);
System.Collections.ArrayList Itemslist=新的System.Collections.ArrayList(\u fpartno.Count);
对于(int i=0;i<\u fpartno.Count;++i){
如果(doc.GetElementsByTagName(“fbomsource”)[i]==null){
//这是XML中的错误,引发异常或记录它
}
//如果需要,请进行更多验证
} 
对于(int i=0;i<\u fpartno.Count;++i){
//实际代码
}

我希望确保完整的XML是有效的,并且所有需要的值都存在。(如果没有必要,所有的<代码>组件<代码>都是有效的,你可以给我们另一个APPACH。在你的示例代码中,有一个空指针,因为你调用了一个空引用的方法<代码> iNeXTeX/代码>。您使用的是双for循环。代码是正确的。您也可以简单地在代码doc.GetElementsByTagName(“fbomsource”)[i]==null?”:doc.GetElementsByTagName(“fbomsource”)[i]
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
}