7

私はという名前のxmlファイルを持っていますBackupManager.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>

タグから文字列に値を取得しようとしています。例:-「backUpPath」タグの値を「D:/BACKUPS/」として文字列に「str」と表示する必要があります。

私が試したコードは

XmlDocument infodoc = new XmlDocument();
infodoc.Load("BackupManager.xml");
//int col = infodoc.GetElementsByTagName("directory").Count;
String str = infodoc.GetElementByID("directory").value;

しかし、私は'str'でnull値を取得しています

4

8 に答える 8

7

試してみる

linqからxmlへの方法

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

また

   XmlNodeList nodeList=
(infodoc.SelectNodes("configuration/Settings/directory"));

foreach (XmlNode elem in nodeList)
{
string strValue = elem.Attributes[1].Value;

}
于 2012-11-28T12:48:51.020 に答える
1

この場合、「ディレクトリ」タグの値を取得する場合は、これを短い構文に使用します。

var directory = infodoc.GetElementsByTagName("directory")[0].Attributes["value"].Value;
于 2021-07-02T01:47:19.013 に答える
0

IDが「ディレクトリ」の要素がないためです。どちらか

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

または

GetElementsByTagName("directory");

2番目のメソッドはXMLNodeListを返すことを忘れないでください!

于 2012-11-28T12:49:37.027 に答える
0

あなたが望むならあなたは使うことができます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"];

            }
于 2012-11-28T12:50:59.450 に答える
0
XmlDocument infodoc = new XmlDocument();
infodoc.Load("BackupManager.xml");
XmlElement directoryElement = document.GetElementById("directory");
string backupPath = directoryElement.GetAttribute("value");
于 2012-11-28T12:53:54.680 に答える
0
if (xml.NodeType == XmlNodeType.Element && xml.Name == "Architecture")
{
    string architecture = xml.ReadElementContentAsString();
}
于 2014-12-15T13:02:56.370 に答える
0

以前は、巨大な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 ?? "");
}
于 2015-05-01T19:55:57.657 に答える
0
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);

            }
于 2017-09-27T04:32:01.287 に答える