这是厂商反馈回来的XML格式,他们可能使用的是偏Linux等系统,而且是自己定义的。怎样揭开这个XML才是最优方案?
谢谢!<?xml version= '1.0 ' encoding= 'UTF-8 '? >
<UranusMsg xmlns="http://www.vivotek.com/Surveillance/ST7501" > 
    <Header > 
        <Fixed > 
            <Type >Res </Type > 
            <CmdName >ClientHello </CmdName > 
            <SID >4AEF004F8E01000009A800000F10080046648CF4 </SID > 
            <Priority >3 </Priority > 
            <Flags >1 </Flags > 
        </Fixed > 
        <Variant > 
            <Size >0000000485 </Size > 
            <Target > </Target > 
            <Return > </Return > 
        </Variant > 
    </Header > 
    <Body > 
        <UranusRes xmlns="http://www.vivotek.com/Surveillance/ST7501" > 
            <Code >0 </Code > 
            <Info >SecurityPolicy </Info > 
            <SecurityPolicy > 
                <Version >1.0 </Version > 
                <AuthList > 
                    <Auth > 
                        <Method >STSimple </Method > 
                        <Param >E2358F2403B8E6D5A60F5BD632B3CFC15F0C099BDEA8BEC0C18235AC8E6247DC </Param > 
                    </Auth > 
                </AuthList > 
                <MyName >S_{12345678-9012-3456-7890-123456789012} </MyName > 
                <MyRefName >S_TestServer </MyRefName > 
                <YourName >U_6 </YourName > 
            </SecurityPolicy > 
        </UranusRes > 
    </Body > 
</UranusMsg >

解决方案 »

  1.   

    格式不是标准的XML首先用读文本文件的办法把他改成标准的
    然后在按照XML的办法读
      

  2.   

    string path = @"E:\111.xml";
    string xml = "<?xml version= \"1.0\" encoding= \"UTF-8\"?>";
    using (StreamReader sr = new StreamReader(path, Encoding.Default))
        {
            sr.ReadLine();
            xml += sr.ReadToEnd();
        }XmlDocument doc = new XmlDocument();
    doc.LoadXml(xml);
    .............
      

  3.   

    怎么不是标准的xml了?别被CSDN加几个多余的空格给蒙蔽了,参考如下代码:
    XmlDocument vXmlDocument = new XmlDocument();
    vXmlDocument.Load(@"c:\temp\temp.xml");
    XmlNode vRoot = vXmlDocument.DocumentElement;
    XmlNamespaceManager vXmlNamespaceManager = 
        new XmlNamespaceManager(vXmlDocument.NameTable);
    vXmlNamespaceManager.AddNamespace("bk", 
        "http://www.vivotek.com/Surveillance/ST7501");
    XmlNode vType = vXmlDocument.SelectSingleNode(
        "/bk:UranusMsg/bk:Header/bk:Fixed/bk:Type", 
        vXmlNamespaceManager);
    if (vType != null) Console.WriteLine("Type.Text={0}", vType.InnerText);
    XmlNode vCmdName = vXmlDocument.SelectSingleNode(
        "/bk:UranusMsg/bk:Header/bk:Fixed/bk:CmdName",
        vXmlNamespaceManager);
    if (vCmdName != null) Console.WriteLine("CmdName.Text={0}", vCmdName.InnerText);<?xml version='1.0' encoding='UTF-8'?> 
    <UranusMsg xmlns="http://www.vivotek.com/Surveillance/ST7501"> 
      <Header> 
        <Fixed> 
          <Type>Res</Type> 
          <CmdName>ClientHello</CmdName> 
          <SID>4AEF004F8E01000009A800000F10080046648CF4</SID> 
          <Priority>3</Priority> 
          <Flags>1</Flags> 
        </Fixed> 
        <Variant> 
          <Size>0000000485</Size> 
          <Target></Target> 
          <Return></Return> 
        </Variant> 
      </Header> 
      <Body> 
        <UranusRes xmlns="http://www.vivotek.com/Surveillance/ST7501"> 
          <Code>0</Code> 
          <Info>SecurityPolicy</Info> 
          <SecurityPolicy> 
            <Version>1.0</Version> 
            <AuthList> 
              <Auth> 
                <Method>STSimple</Method> 
                <Param>E2358F2403B8E6D5A60F5BD632B3CFC15F0C099BDEA8BEC0C18235AC8E6247DC</Param> 
              </Auth> 
            </AuthList> 
            <MyName>S_{12345678-9012-3456-7890-123456789012}</MyName> 
            <MyRefName>S_TestServer</MyRefName> 
            <YourName>U_6</YourName> 
          </SecurityPolicy> 
        </UranusRes> 
      </Body> 
    </UranusMsg>
      

  4.   

    zswang 采用路径的模式编程有点麻烦,能否有其余更好的办法?
    有些时候,当中的某一两个元素会是不存在的。
      

  5.   

    把你的XML建立一个XSD,然后使用XSD.exe生成架构的Class,然后对你的这个XML进行反系列化即可,对这个Class进行系列化会生成XMLhttp://blog.csdn.net/cnming/archive/2007/10/11/1819980.aspx这是系列化,反系列化是其反过程,不过我没有写Blog