如何访问单个XML元素';使用带有WebMatrix的C#.net网页的值

本文关键字:WebMatrix 网页 net 访问 何访问 单个 元素 XML | 更新日期: 2023-09-27 18:08:20

我查看了很多资源,做了很多研究,并尝试了许多"最佳猜测",以便使用带有C#的WebMatrix、网页一次访问一个元素,但我所尝试的都没有成功。

考虑一个简单的xml文档,如下所示:

<root>
    <requisitionData>
        <element1>I am element 1</element1>
        <element2>I am element 2</element2>
    </requisitionData>
</root>

我知道我可以使用foreach循环,就像这样:

@using System.Xml.Linq
XDocument doc = XDocument.Load(Server.MapPath("~/User_Saves/cradebaugh/testFile.xml"));
foreach (XElement element in doc.Descendants("requisitionData"))
{
    @element.Value
}

当然,这样做效果很好。但是,如果我只是想将单个元素<element1>的值存储在字符串变量中,该怎么办?

我看了这里(下面的链接(,但我无法理解这段代码(对我来说,它看起来几乎不像C#,但话说回来,我对解析XML还很陌生…(:

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/b14ce4d1-77f1-420d-ad91-0989794a1d45/

我还查看了以下内容:如何从XDocument 获取XML节点

但是这里显示的代码对我来说也没有任何意义。我一直在想,必须有一种更简单的方法来做到这一点,希望不用学习全新的查询方法。

---------------------------------我尝试过的东西-------------------------------

XDocument doc = XDocument.Load(Server.MapPath("~/User_Saves/cradebaugh/testFile.xml"));
string element = doc.Descendants("requisitionData").Descendants("element1").Value;

我收到的错误:"缺少使用指令或程序集引用

XDocument doc = XDocument.Load(Server.MapPath("~/User_Saves/cradebaugh/testFile.xml"));
XElement element = doc.Descendants("element1");
string val = element.Value;

我收到的错误:无法将类型"System.Collections.Generic.IEnumerable"隐式转换为"System.Xml.Linq.XElement"。存在显式转换(是否缺少强制转换?(

事实上,我也尝试过其他事情,但我得到了与上面显示的几乎相同的错误。我是在让事情变得更难,还是过于简单化了?

-------------------------更新------------------------------

我能够做到这一点:

string element = doc.Element("root").Element("requisitionData").Element("element1").Value;
@element

然而,这种方法让我担心的一点是,.Element选择了"第一个"匹配,因此在一个看起来像这样的xml文档中:

<root>
    <requisitionData>
        <element1>I am element 1</element1>
        <element2>I am element 2</element2>
    </requisitionData>
    <requisitionData>
        <element1>I am element 1</element1>
        <element2>I am element 2</element2>
    </requisitionData>
</root>

如何访问第二次出现的<element1>

如何访问单个XML元素';使用带有WebMatrix的C#.net网页的值

@using System.Xml.Linq
XDocument doc = XDocument.Load(Server.MapPath("~/User_Saves/cradebaugh/testFile.xml"));
foreach (XElement element in doc.Element("root").Element("requisitionData").Descendants())
{
    string value = element.Value;
}

或使用XPath:

@using System.Xml.Linq
@using System.Xml.XPath
XDocument doc = XDocument.Load(Server.MapPath("~/User_Saves/cradebaugh/testFile.xml"));
foreach (XElement element in doc.XPathSelectElement("//requisitionData").Descendants())
{
    string value = element.Value;
}

更新:

例如,如果您想从更新的示例中选择第二个<element1>节点:

string value = doc.XPathSelectElement("//requisitionData[2]/element1").Value;