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

时间:2013-04-09 13:46:21

标签: c# xml razor webmatrix asp.net-webpages

我查看了大量资源,做了大量研究,并尝试使用带有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/

我也在这里查了一下:How to Get XML Node from XDocument

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

---------------------------------我做过的事--------- ------------------------

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'。存在显式转换(您是否错过了演员?)

我确实尝试过其他的东西,但是我得到了与上面所示相同的错误。我是否比现在更难,或者我过于简单化了?

------------------------- UPDATE --------------------- ---------

我能够让这个工作:

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>

1 个答案:

答案 0 :(得分:5)

@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;