当特定的XML节点具有特定值时,如何读取整个XML节点

时间:2012-10-04 17:57:32

标签: c# xml linq

如何foreach我只能阅读XML标记Equipe,其中<DesFilialnet>等于Rest

这是一个例子:

<Equipe>
    <CPFUsuario>5546</CPFUsuario>
    <CodUsuario>6536</CodUsuario>
    <ApelidoUsuario>PARREIRA.MG</ApelidoUsuario>
    <NomeCompletoUsuario>JORGE</NomeCompletoUsuario>
    <CodAgenciaLopesnet>15513</CodAgenciaLopesnet>
    <DesAgenciaLopesnet>MINAS GERAIS LTDA.</DesAgenciaLopesnet>
    <DesFilialnet>Rest</DesFilialLopesnet>
    <CodEquipe>584309</CodEquipe>
    <CodEquipeNovo>597951</CodEquipeNovo>
    <DesEquipe>CARLOSMG</DesEquipe>
    <CodEquipeSecundaria />
    <CodEquipeSecundariaNovo />
    <DesEquipeSecundaria />
    <CodFilialSiebelPronto></CodFilialSiebelPronto>
    <GrupoAcesso>1</GrupoAcesso>
</Equipe>

我有很多Equipe标记,但<DesFilialnet>更改了,我只想<Equipe>其中<DesFilialnet>是休息。

按照我的方式进行

    public void leXmlCors(string file)
    {
        XmlReader rdr = XmlReader.Create(file);
        XDocument doc2 = XDocument.Load(rdr);

        foreach (var equipes in doc2.Root.Descendants("Equipe"))
        {
            foreach (var element in equipes.Descendants())
            {
                 // This will read all <Equipe> tag, but I don't want all <Equipe> tag
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

然后给出XML:

<Test>
    <Equipe>
        <CPFUsuario>5546</CPFUsuario>
        <CodUsuario>6536</CodUsuario>
        <ApelidoUsuario>PARREIRA.MG</ApelidoUsuario>
        <NomeCompletoUsuario>JORGE</NomeCompletoUsuario>
        <CodAgenciaLopesnet>15513</CodAgenciaLopesnet>
        <DesAgenciaLopesnet>MINAS GERAIS LTDA.</DesAgenciaLopesnet>
        <DesFilialnet>Rest</DesFilialnet>
        <CodEquipe>584309</CodEquipe>
        <CodEquipeNovo>597951</CodEquipeNovo>
        <DesEquipe>CARLOSMG</DesEquipe>
        <CodEquipeSecundaria />
        <CodEquipeSecundariaNovo />
        <DesEquipeSecundaria />
        <CodFilialSiebelPronto></CodFilialSiebelPronto>
        <GrupoAcesso>1</GrupoAcesso>
    </Equipe>
    <Equipe>
        <CPFUsuario>5546</CPFUsuario>
        <CodUsuario>6536</CodUsuario>
        <ApelidoUsuario>PARREIRA.MG</ApelidoUsuario>
        <NomeCompletoUsuario>JORGE</NomeCompletoUsuario>
        <CodAgenciaLopesnet>15513</CodAgenciaLopesnet>
        <DesAgenciaLopesnet>MINAS GERAIS LTDA.</DesAgenciaLopesnet>
        <DesFilialnet>not rest</DesFilialnet>
        <CodEquipe>584309</CodEquipe>
        <CodEquipeNovo>597951</CodEquipeNovo>
        <DesEquipe>CARLOSMG</DesEquipe>
        <CodEquipeSecundaria />
        <CodEquipeSecundariaNovo />
        <DesEquipeSecundaria />
        <CodFilialSiebelPronto></CodFilialSiebelPronto>
        <GrupoAcesso>1</GrupoAcesso>
    </Equipe>
</Test>

以下内容应该有效:

var equipes = XDocument.Parse(xml)
                       .Elements("Test")
                       .Elements("Equipe")
                       .Where(e => e.Element("DesFilialnet")
                       .Value.ToUpperInvariant() == "Rest".ToUpperInvariant());

现在,您可以在生成的foreach

上执行IEnumerable<XElement>循环
foreach (var xElement in equipes)
        {
           //Do something
        }

当然这需要Linq和以下using声明:

using System.Xml.Linq;
using System.Linq;