mus*_*fan 15 c# xpath xmldocument
可以说我有以下xml(一个简单的例子)
<rows>
<row>
<name>one</name>
</row>
<row>
<name>two</name>
</row>
</rows>
Run Code Online (Sandbox Code Playgroud)
我试图通过使用XmlDocument和XPath解析这个(最终我可以创建行列表).
例如...
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
foreach(XmlNode row in doc.SelectNodes("//row"))
{
string rowName = row.SelectSingleNode("//name").InnerText;
}
Run Code Online (Sandbox Code Playgroud)
为什么,在我的foreach循环中,rowName总是"一个"?我希望它在第一次迭代时是"一个",在第二次迭代时是"两个".
似乎// name获取文档中的第一个实例,而不是我期望的行中的第一个实例.毕竟,我在"行"节点上调用该方法.如果这是"它是如何工作的"那么任何人都可以解释我如何改变它以满足我的需求?
谢谢
Sir*_*lot 17
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
foreach(XmlNode row in doc.SelectNodes("//row"))
{
var rowName = row.SelectSingleNode("name");
}
Run Code Online (Sandbox Code Playgroud)
您发布的代码实际上是否正确?我在row.SelectNode()上遇到编译错误,因为它不是XmlNode的成员.
无论如何,我上面的例子有效,但假定<name>节点中只有一个<row>节点,所以你可能需要使用SelectNodes()而不是SelectSingleNode()如果不是这样的话.
正如其他人所示,.InnerText用来获得价值.
使用 LINQ to XML。包含using System.Xml.Linq;在您的代码文件中,然后执行以下代码来获取您的列表
XDocument xDoc = XDocument.Load(filepath);
IEnumerable<XElement> xNames;
xNames = xDoc.Descendants("name");
Run Code Online (Sandbox Code Playgroud)
这将为您提供名称元素的列表。然后,如果您想将其变成List<string>只需这样做:
List<string> list = new List<string>();
foreach (XElement element in xNames)
{
list.Add(element.value);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37462 次 |
| 最近记录: |