Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在.Net中读取XML字符串_.net_Xml_Vb.net - Fatal编程技术网

在.Net中读取XML字符串

在.Net中读取XML字符串,.net,xml,vb.net,.net,Xml,Vb.net,有一个sp返回300多行,其中一列的值为XML PATH的格式。其他列具有正常值 <row> <DocType>1</DocType> <GeneralName>CV</GeneralName> <StartDate>1900-12-31</StartDate> <EndDate>1900-12-31</EndDate> <CertNo></CertN

有一个sp返回300多行,其中一列的值为XML PATH的
格式。其他列具有正常值

<row>
  <DocType>1</DocType>
  <GeneralName>CV</GeneralName>
  <StartDate>1900-12-31</StartDate>
  <EndDate>1900-12-31</EndDate>
  <CertNo></CertNo>
</row>

还有其他有效的方法吗?

更新-我刚刚意识到标记已更改为
vb.net
,但是框架类是相同的,所以我希望它仍然有用。

你可以用

产生

1 CV 1900-12-31 1900-12-31 

此外,如果您的结果集不可能改变,并且可以完全控制数据类型等,您也可以考虑使用和定义一个类,该类表示结果集中的各种元素:

void Main()
{
    var xd = XDocument.Parse(xml);
    var ser =new XmlSerializer(typeof(row));    
    foreach (var rowElement in xd.Descendants().Where(x=>x.Name.LocalName=="row"))
    {
     using (var reader = rowElement.CreateReader())
     {
       var row1 = ser.Deserialize(reader) as row;
       Console.WriteLine(row1);
      }
    }
}


public class row
{
  public int DocType {get;set;}
  public string GeneralName{get;set;}
  public DateTime StartDate{get;set;}
  public DateTime EndDate{get;set;}
  public string CertNo{get;set;}
}
请注意,您可以使用各种方法来控制XML如何映射到类名和属性,因此这是一个非常基本的示例-当您使用
XmlRootAttribute
类等时,类名不必是“行”


Serialiser路由对于大量数据可能是最有效的,尽管对于300行,我不确定您是否会看到很大的差异。

您可能能够快速将XML数据转换为数据集:

Imports System.Xml
...
Public Function GetXMLDataset(XMLText As String) As DataSet
    Try
        Dim ds As New DataSet
        Dim xd As New XmlDocument
        xd.LoadXml(XMLText)
        ds.ReadXml(New XmlNodeReader(xd), XmlReadMode.InferSchema)
        Return ds
    Catch ex As Exception
        MsgBox(ex.Message)
        Return Nothing
    End Try
End Function

请高效地定义:这是否运行得不够快?您还发现并评估了在.NET中读取XML的其他方法吗?主要关注的是我必须循环并创建新的XMLDocument对象的行数。不会超过600行。我也遇到过LINQtoXML。谢谢,尝试了第一个示例,效果非常好。您认为这种方法比XML解析(XMLReader)遇到这种链接更好吗;就我个人而言,我之所以这么做是因为我发现Linq To XML语法更“自然”而且更容易学习——如果您是XML解析新手,那么您不会出错。你有一个很好的链接。虽然序列化方法将是最快的,但在您的情况下,它实际上取决于您必须处理的数据量以及不同API对您的舒适程度!
1 CV 1900-12-31 1900-12-31 
void Main()
{
    var xd = XDocument.Parse(xml);
    var ser =new XmlSerializer(typeof(row));    
    foreach (var rowElement in xd.Descendants().Where(x=>x.Name.LocalName=="row"))
    {
     using (var reader = rowElement.CreateReader())
     {
       var row1 = ser.Deserialize(reader) as row;
       Console.WriteLine(row1);
      }
    }
}


public class row
{
  public int DocType {get;set;}
  public string GeneralName{get;set;}
  public DateTime StartDate{get;set;}
  public DateTime EndDate{get;set;}
  public string CertNo{get;set;}
}
Imports System.Xml
...
Public Function GetXMLDataset(XMLText As String) As DataSet
    Try
        Dim ds As New DataSet
        Dim xd As New XmlDocument
        xd.LoadXml(XMLText)
        ds.ReadXml(New XmlNodeReader(xd), XmlReadMode.InferSchema)
        Return ds
    Catch ex As Exception
        MsgBox(ex.Message)
        Return Nothing
    End Try
End Function