Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET在使用XmlTextReader找到特定的XML节点后编辑它们_C#_Xml - Fatal编程技术网

C# .NET在使用XmlTextReader找到特定的XML节点后编辑它们

C# .NET在使用XmlTextReader找到特定的XML节点后编辑它们,c#,xml,C#,Xml,XML文件中的某些节点需要编辑 我用XmlTextReader收集它们。如果我遇到备注节点,我会跳到下一个节点。如果我遇到其他指定的节点,并且它们不是以某个模式开始的,我会将它们放在一个集合中 List<KeyValuePair<string, string>> Data = new List<KeyValuePair<string, string>>(); string key = ""; string value = ""; reader =

XML文件中的某些节点需要编辑

我用XmlTextReader收集它们。如果我遇到备注节点,我会跳到下一个节点。如果我遇到其他指定的节点,并且它们不是以某个模式开始的,我会将它们放在一个集合中

List<KeyValuePair<string, string>> Data = new List<KeyValuePair<string, string>>();
string key = "";
string value = "";
reader = new XmlTextReader(file);

switch (reader.NodeType)
{
    case XmlNodeType.Element:
        switch (reader.Name)
        {
            case "Remark":
                reader.Skip();
                break;
            case "DataTableColumn":
            case "Label":
            case "Button":
            case "PopupPanel":
                while (reader.MoveToNextAttribute())
                {
                    switch (reader.Name)
                    {
                        case "ID":
                            key = reader.Value;
                            break;
                        case "Header":
                        case "Caption":
                            value = reader.Value;
                            break;
                    }
                }
                if (!value.StartsWith("@"))
                {
                    Data.Add(new KeyValuePair<string, string>(key, value));
                }
                break;
        }
        break;
}
列表数据=新列表();
字符串键=”;
字符串值=”;
reader=新的XmlTextReader(文件);
开关(reader.NodeType)
{
case XmlNodeType.Element:
开关(reader.Name)
{
案例“备注”:
reader.Skip();
打破
案例“DataTableColumn”:
案例“标签”:
案例“按钮”:
案例“PopupPanel”:
while(reader.MoveToNextAttribute())
{
开关(reader.Name)
{
案例“ID”:
key=reader.Value;
打破
案例“标题”:
案例“说明”:
value=reader.value;
打破
}
}
如果(!value.StartsWith(“@”))
{
添加(新的KeyValuePair(key,value));
}
打破
}
打破
}

现在,我已经修改了集合中所有项的值,我想更新原始文件。做这件事的最佳方法是什么?

有什么理由不使用XSLT吗?这似乎是最适合这样做的技术。

有什么理由不使用XSLT吗?这似乎是最适合这样做的技术。

如果您需要修改XML文件,我建议您使用XDocument,前提是该文件足够小,可以加载到内存中。

否则,使用XmlReader进行读取,结合使用XmlWriter进行写入,或者使用XSLT。

如果您需要修改XML文件,我建议您使用XDocument,前提是该文件足够小,可以加载到内存中。

否则,请使用XmlReader进行阅读,并结合使用XmlWriter进行编写,或者使用XSLT。

首先,不要使用
新的XmlTextReader()
。自.NET 2.0以来,它一直被弃用。改用
XmlReader.Create()

其次,XmlReader是一个只读、只向前的游标。您不能返回以写出修改的节点


您应该使用LINQ to XML或XmlDocument来完成这类工作。

首先,不要使用
新的XmlTextReader()
。自.NET 2.0以来,它一直被弃用。改用
XmlReader.Create()

其次,XmlReader是一个只读、只向前的游标。您不能返回以写出修改的节点


您应该使用LINQ to XML或XmlDocument来完成这类工作。

您使用的是.NET的哪个版本?您使用的是.NET的哪个版本?除非我不能正确理解XSLT,否则它对我没有帮助。我需要找到并替换原始文件中的值。文件中有需要本地化的字符串,因此我想用指定的常量替换这些字符串。例如,变成。这在XSLT中相当简单。尽管如下所述,如果您不想使用XSLT,那么使用XmlDocument将比XMLReader更好,因为XMLReader是只读的,只能向前看。我需要找到并替换原始文件中的值。文件中有需要本地化的字符串,因此我想用指定的常量替换这些字符串。例如,变成。这在XSLT中相当简单。尽管如下所述,如果您不想使用XSLT,那么使用XmlDocument将比XMLReader更好,XMLReader是只向前和只读的。我不认为我能够做出与XmlReader相同的选择,但在再次查看MSDN后,我认为这是可能的。既然您有.NET 4.0,那么应该使用LINQ to XML。它要优雅一点。我试试XmlDocument。我不认为我能够做出与XmlReader相同的选择,但在再次查看MSDN后,我认为这是可能的。既然您有.NET 4.0,那么应该使用LINQ to XML。它相当优雅一点。