Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#xml读取器,相同的元素名称_C#_Xml_Reader - Fatal编程技术网

C#xml读取器,相同的元素名称

C#xml读取器,相同的元素名称,c#,xml,reader,C#,Xml,Reader,我正在尝试从xml文件中读取一个元素。 我需要读取“元数据”中“link”元素中的字符串, 但是有两个元素叫做“链接”,我只需要第二个元素: <metadata> <name>visit-2015-02-18.gpx</name> <desc>February 18, 2015. Corn</desc> <author> <name>text</name> <link href=

我正在尝试从xml文件中读取一个元素。 我需要读取“元数据”中“link”元素中的字符串, 但是有两个元素叫做“链接”,我只需要第二个元素:

<metadata>
<name>visit-2015-02-18.gpx</name>
<desc>February 18, 2015. Corn</desc>
<author>
    <name>text</name>
    <link href="http://snow.traceup.com/me?id=397760"/>
</author>
<link href="http://snow.traceup.com/stats/u?uId=397760&amp;vId=1196854"/>
<keywords>Trace, text</keywords>
有人知道我如何跳过第一个“链接”元素吗? 或者检查reader.ReadElementContentAsString()是否包含“Vid”之类的内容

我希望你能帮助我。

答案是xpath:)

使用检查字符串是否包含所需的子字符串,在本例中为
vId

public string GetID(string path)
{
    XmlReader reader = XmlReader.Create(path);
    while (reader.Read())
    {
        if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "link"))
        {
        if (reader.HasAttributes)
        {
            var id = reader.GetAttribute("href");
            if (id.Contains(@"&vId"))
            {
                MessageBox.Show(id + "= correct id");
                return id;
            }
        }
    }
    return String.Empty;
}
如果可以接受,您还可以使用:

输出总是:

http://snow.traceup.com/stats/u?uId=397760&vId=1196854= first id
另一个选项是使用类似@user5507337的XPath。

XDocument示例:

var xml = XDocument.Load(path); //assuming path points to file
var nodes = xml.Root.Elements("link");
foreach(var node in nodes)
{
    var href = node.Attribute("href").Value;
}

每次读取
link
int并忽略<2时递增一个int?是否必须使用XmlReader?如果您的xml结构与您提供的格式一致,则可以使用XMLDocument和XPath获取信息谢谢!我用contain试过了,但没用,但我想我弄错了!工作完美!很高兴这个答案有用。
public string GetID(string path)
{
    XmlReader reader = XmlReader.Create(path);
    while (reader.Read())
    {
        if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "link"))
        {
        if (reader.HasAttributes)
        {
            var id = reader.GetAttribute("href");
            if (id.Contains(@"&vId"))
            {
                MessageBox.Show(id + "= correct id");
                return id;
            }
        }
    }
    return String.Empty;
}
var reader = XDocument.Load(path); // or XDocument.Parse(path);
// take the outer link
Console.WriteLine(reader.Root.Element("link").Attribute("href").Value);
http://snow.traceup.com/stats/u?uId=397760&vId=1196854= first id
var xml = XDocument.Load(path); //assuming path points to file
var nodes = xml.Root.Elements("link");
foreach(var node in nodes)
{
    var href = node.Attribute("href").Value;
}