分类存档: LINQ

解析 XML 使用 LINQ

这里是一个简单的例子,使用 LINQ 来分析一些  XML 和甜才能得到, 甜其中属性.

这里是我想要解析的 XML:

<?xml 版本 ="1.0" 编码 ="utf-8" ?>
<DeafultConfigurationSets>
  <PageLayouts>

    <PageLayout 名称 ="xyzzy">
      <选项卡>
        <选项卡 TabOrder ="1" TabLabel ="x" SharePointContentType ="" AdditionalConstraints ="ac1"/>
        <选项卡 TabOrder ="2" TabLabel ="y" SharePointContentType ="b" AdditionalConstraints ="ac2"/>
      </选项卡>
    </PageLayout>

    <PageLayout 名称 ="xyzzy2">
      <选项卡>
        <选项卡 TabOrder ="100" TabLabel ="x" SharePointContentType ="" AdditionalConstraints ="ac1"/>
        <选项卡 TabOrder ="101" TabLabel ="y" SharePointContentType ="b" AdditionalConstraints ="ac2"/>
        <选项卡 TabOrder ="103" TabLabel ="z" SharePointContentType ="c" AdditionalConstraints ="ac3"/>
      </选项卡>
    </PageLayout>

  </PageLayouts>
</DeafultConfigurationSets>

我想通过以上的分析建立在运行时的某些选项卡。  我的选项卡取决于页面的布局。  如果我的页面布局的名称是"xyzzy2",然后我想要的选项卡 100, 101 和 103 (中的选项卡 <PageLayout 名称 ="xyzzy2">).

这里是 LINQ 并不管用:

var allTabs =
              从 p 中
                  XElement.Parse(theXmlToParse).
                 
元素(""PageLayouts).
                  元素(""PageLayout)
              在哪里 (p.Attribute("名称").Value.Equals(""xyzzy2))
              从 p.Elements m("选项卡").元素("选项卡")
              选择 m;

          Results.Text = 字符串。空;

          foreach (在 allTabs 中的 var aTab)
          {
              Results.Text =
                  "Tab 键顺序: " + aTab.Attribute(""TabOrder).价值 + " |" +
                  "选项卡标签: " + aTab.Attribute(""TabLabel).价值 + " | " +
                  "SharePointContentType: " + aTab.Attribute(""SharePointContentType).价值 + " | " +
                  "AdditionalConstraints: " + aTab.Attribute(""AdditionalConstraints).价值 + ""r;
          }

在上面, "theXmlToParse"变量是字符串变量, 但您可以使用负载() 如果你喜欢一个流上的方法.

"结果"是一个 web 窗体上,当这段代码执行时的标签, 它看起来像这样:

SNAGHTML11cd2e7c

我没找出如何尚未对结果进行排序, 所以我会把这个未来的博客.

</结束>

订阅我的博客.

跟我在 Twitter 上 http://www.twitter.com/pagalvin