Tag Archives: LINQ

Análise de XML com LINQ

Aqui está um exemplo rápido usando LINQ para analisar alguns  XML e receber no doce, doce atributos nele.

Aqui está o XML eu quero analisar:

<?XML version = "1.0" Encoding = "utf-8" ?>
<DeafultConfigurationSets>
  <PageLayouts>

    <PageLayout nome = "xyzzy">
      <Guias>
        <Guia TabOrder = "1" TabLabel = "x" SharePointContentType = "a" AdditionalConstraints = "ac1" />
        <Guia TabOrder = "2" TabLabel = "y" SharePointContentType = "b" AdditionalConstraints = "ac2" />
      </Guias>
    </PageLayout>

    <PageLayout nome = "xyzzy2">
      <Guias>
        <Guia TabOrder = "100" TabLabel = "x" SharePointContentType = "a" AdditionalConstraints = "ac1" />
        <Guia TabOrder = "101" TabLabel = "y" SharePointContentType = "b" AdditionalConstraints = "ac2" />
        <Guia TabOrder = "103" TabLabel = "z" SharePointContentType = "c" AdditionalConstraints = "ac3" />
      </Guias>
    </PageLayout>

  </PageLayouts>
</DeafultConfigurationSets>

Eu quero construir algumas abas em tempo de execução analisando o acima exposto.  Meus guias dependem de um layout de página.  Se o nome do meu layout da página é "xyzzy2" deseja obter guias 100, 101 and 103 (guias <PageLayout nome = "xyzzy2">).

Aqui está o LINQ que faz isso:

var allTabs =
              de p em
                  XElement(theXmlToParse).
                 
Elementos("PageLayouts").
                  Elementos("PageLayout")
              onde (p.Attribute("nome").Value.Equals("xyzzy2"))
              de m em p.Elements("Guias").Elementos("Guia")
              Selecione m;

          Results.text = string.Vazio;

          foreach (var aTab em allTabs)
          {
              Results.Text =
                  "Ordem de tabulação: " + aTab.Attribute("TabOrder").Valor + " |" +
                  "Tab Label: " + aTab.Attribute("TabLabel").Valor + " | " +
                  "SharePointContentType: " + aTab.Attribute("SharePointContentType").Valor + " | " +
                  "AdditionalConstraints: " + aTab.Attribute("AdditionalConstraints").Valor + "r";
          }

No exemplo acima, a variável "theXmlToParse" é uma variável de Cadeia de caracteres, mas você pode usar a carga() Método em um fluxo se você gosta de.

"Resultados" são um rótulo em um formulário da web e quando esse código é executado, Ele se parece com isso:

SNAGHTML11cd2e7c

Eu não tenho trabalhado como classificar os resultados ainda, então vou deixar isso para um borne futuro do blogue.

</fim>

Subscreva ao meu blog.

Siga-me no Twitter em http://www.twitter.com/pagalvin