【发布时间】:2011-02-27 07:12:28
【问题描述】:
如何在 xml 文件中按标签名称查找值?使用 C#.net 2.0
我的 xmldocument 中只有 10 个不同的节点。
我不想写 xpath。我认为有一个自动查找属性。
【问题讨论】:
如何在 xml 文件中按标签名称查找值?使用 C#.net 2.0
我的 xmldocument 中只有 10 个不同的节点。
我不想写 xpath。我认为有一个自动查找属性。
【问题讨论】:
我已经用这个 scneirao 解决了我的问题:
XmlNodeList nl = xdoc.GetElementsByTagName("CustomerID"); sb.Append(nl[0].InnerXml);
【讨论】:
简单示例:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(someRawData);
XmlNodeList yourNodes = xmlDoc.GetElementsByTagName("YourTagName");
然后您可以遍历 yourNodes 并获取值。
【讨论】:
不记得确切的语法,但写一个 Xpath 查询,然后使用XPathNavigator.Select 找到它。
编辑:请记住,我认为它类似于//@tagname,所以如果你这样做XPathNavigator.Select("//@tagname"),我认为它会起作用。假设标签是指一个属性,如果你正在寻找元素,它应该只是//tagname。
【讨论】:
查看这个完整的函数,从 xml 文件中获取节点值以及属性值...
public string GetXmlNodeValue(string xmlfilePath, string TagName, string Attribute)
{
XmlDocument objXML = new XmlDocument();
bool IsNodeValuefound = false;
string Value = string.Empty;
try
{
if (File.Exists(xmlfilePath))
{
objXML.Load(xmlfilePath);
XmlNode xNode = objXML.DocumentElement.FirstChild;
while (xNode != null)
{
if (string.Compare(xNode.Name, TagName, true) == 0)
{
if (!string.IsNullOrEmpty(Attribute))
{
if (xNode.Attributes.GetNamedItem(Attribute) != null)
{
IsNodeValuefound = true;
Value = xNode.Attributes.GetNamedItem(Attribute).Value;
}
}
else
{
IsNodeValuefound = true;
Value = xNode.InnerText.Trim();
}
}
xNode = xNode.NextSibling;
}
}
if (IsNodeValuefound)
return Value;
else
return string.Empty;
}
catch (XmlException xmlEx)
{
throw xmlEx;
}
catch (Exception ex)
{
throw ex;
}
finally
{
objXML = null;
}
}
【讨论】:
首先,通过这段代码获取XmlDocument:
XmlDocument infodoc = new XmlDocument();
infodoc.LoadXml(xmlString);
如果你的标签看起来像:
<directory value="D:/BACKUPS"></directory>
通过以下方式获取“目录”标签的值:
var directory = infodoc.GetElementsByTagName("directory")[0].Attributes["value"].Value;
如果你的标签看起来像:
<directory>D:/BACKUPS</directory>
通过以下方式获取“目录”标签的值:
var directory = infodoc.GetElementsByTagName("directory")[0].InnerXml;
【讨论】: