C#获取XML标记值

C#获取XML标记值,c#,xml,C#,Xml,我有一个名为BackupManager.xml的xml文件 <?xml version="1.0" encoding="utf-8" ?> <configuration> <Settings> <directory id="backUpPath" value="D:/BACKUPS/"></directory> <filename id="feilname" value="SameName"></filename>

我有一个名为
BackupManager.xml的xml文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<Settings>
<directory id="backUpPath" value="D:/BACKUPS/"></directory>
<filename id="feilname" value="SameName"></filename>
<period id ="period" value="15"></period>
</Settings>
</configuration>
但是我在'str'上得到空值。

请尝试

linq到xml的方式

IEnumerable<XElement> direclty = infodoc.Elements("Settings").Elements("directory");
var rosterUserIds = direclty .Select(r => r.Attribute("value").Value);

因为您没有ID为“directory”的元素。要么你想要

GetElementByID("backUpPath").GetAttribute("value");


记住,第二个方法返回一个XMLNodeList

如果需要,您可以使用
XmlReader

   string str ="";
   using (var reader = new StreamReader(BackupManager.xml))
            {
                var all = reader.ReadToEnd();
                StringReader stringReader = new StringReader(all);
                XmlReader xmlReader = XmlTextReader.Create(stringReader,new System.Xml.XmlReaderSettings() { IgnoreWhitespace = true, IgnoreComments = true });
                while (xmlReader.Read())
                    if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "directory")
                         str = xmlReader["value"];

            }

在过去,我必须处理一个庞大的XML,而性能也是一个问题。我所需要的只是对XML的非缓存、仅转发、只读访问

此外,我没有对模式的控制权,只需要从XML和CDATA中挤出某些标记值

下面是我最终使用的:

private string GetValueFromXmlTag(string xml, string tag)
{
    if (xml == null || tag == null || xml.Length == 0 || tag.Length == 0)
        return "";

    string
        startTag = "<" + tag + ">",
        endTag = "</" + tag + ">",
        value = null;

    int
        startTagIndex = xml.IndexOf(tag, StringComparison.OrdinalIgnoreCase),
        endTagIndex = xml.IndexOf(endTag, StringComparison.OrdinalIgnoreCase);


    if (startTagIndex < 0 || endTagIndex < 0)
        return "";

    int valueIndex = startTagIndex += startTag.Length - 1;

    try
    {
        value = xml.Substring(valueIndex, endTagIndex - valueIndex);
    }
    catch (ArgumentOutOfRangeException responseXmlParserEx)
    {
        string err = string.Format("Error reading value for \"{0}\" tag from XXX XML", tag);
        log.Error(err, responseXmlParserEx);
    }

    return (value ?? "");
}
私有字符串GetValueFromXmlTag(字符串xml,字符串标记)
{
if(xml==null | | tag==null | | xml.Length==0 | | tag.Length==0)
返回“”;
一串
startTag=“”,
endTag=“”,
值=空;
int
startTagIndex=xml.IndexOf(标记,StringComparison.OrdinalIgnoreCase),
endTagIndex=xml.IndexOf(endTag,StringComparison.OrdinalIgnoreCase);
如果(起始标记索引<0 | |结束标记索引<0)
返回“”;
int valueIndex=startTagIndex+=startTag.Length-1;
尝试
{
value=xml.Substring(valueIndex,endTagIndex-valueIndex);
}
捕获(ArgumentOutOfRangeException响应EXMLParseRex)
{
string err=string.Format(“从XXX XML读取\“{0}\”标记的值时出错”,标记);
log.Error(err,responseXmlParserEx);
}
返回值(值??);
}

如果答案对您有帮助,请不要忘记投票表决。我们还需要注意的是,XmlDocument应该成为LINQ部分的XDocument。因此:XDocument infodoc=XDocument.Load(“BackupManager.xml”);
GetElementsByTagName("directory");
   string str ="";
   using (var reader = new StreamReader(BackupManager.xml))
            {
                var all = reader.ReadToEnd();
                StringReader stringReader = new StringReader(all);
                XmlReader xmlReader = XmlTextReader.Create(stringReader,new System.Xml.XmlReaderSettings() { IgnoreWhitespace = true, IgnoreComments = true });
                while (xmlReader.Read())
                    if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "directory")
                         str = xmlReader["value"];

            }
XmlDocument infodoc = new XmlDocument();
infodoc.Load("BackupManager.xml");
XmlElement directoryElement = document.GetElementById("directory");
string backupPath = directoryElement.GetAttribute("value");
if (xml.NodeType == XmlNodeType.Element && xml.Name == "Architecture")
{
    string architecture = xml.ReadElementContentAsString();
}
private string GetValueFromXmlTag(string xml, string tag)
{
    if (xml == null || tag == null || xml.Length == 0 || tag.Length == 0)
        return "";

    string
        startTag = "<" + tag + ">",
        endTag = "</" + tag + ">",
        value = null;

    int
        startTagIndex = xml.IndexOf(tag, StringComparison.OrdinalIgnoreCase),
        endTagIndex = xml.IndexOf(endTag, StringComparison.OrdinalIgnoreCase);


    if (startTagIndex < 0 || endTagIndex < 0)
        return "";

    int valueIndex = startTagIndex += startTag.Length - 1;

    try
    {
        value = xml.Substring(valueIndex, endTagIndex - valueIndex);
    }
    catch (ArgumentOutOfRangeException responseXmlParserEx)
    {
        string err = string.Format("Error reading value for \"{0}\" tag from XXX XML", tag);
        log.Error(err, responseXmlParserEx);
    }

    return (value ?? "");
}
XmlDocument infodoc = new XmlDocument();
  //Server.MapPath() return the xml file address
            infodoc.Load(Server.MapPath("~/XMLFile1.xml"));
            XmlNodeList nodeList =
(infodoc.SelectNodes("configuration/Settings/backUPpath"));
            foreach (XmlNode elem in nodeList)
            {

               Response.Write(elem.Attributes[1].Value);

            }