C#xml读取器,相同的元素名称
我正在尝试从xml文件中读取一个元素。 我需要读取“元数据”中“link”元素中的字符串, 但是有两个元素叫做“链接”,我只需要第二个元素: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=
<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&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;
}