Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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# 读取xml,更新它并再次写入流,而无需全部加载_C#_Xml - Fatal编程技术网

C# 读取xml,更新它并再次写入流,而无需全部加载

C# 读取xml,更新它并再次写入流,而无需全部加载,c#,xml,C#,Xml,谢谢你的链接。我想到了这个 <?xml version="1.0" encoding="utf-8"?> <Root> <Movies> <Movie> <... attributes ...> </Movie> <Movie> <... attributes ...> </M

谢谢你的链接。我想到了这个

<?xml version="1.0" encoding="utf-8"?>
<Root>
    <Movies>
        <Movie>
            <... attributes ...>
        </Movie>
        <Movie>
            <... attributes ...>
        </Movie>
    </Movies>
</Root>

}

试着在这里调整一下模式:啊,你比我强。对不起:)我只是想在我知道是否能解决它之前问这个问题。这样别人也可以在找到答案时得到答案。
<?xml version="1.0" encoding="utf-8"?>
<Root>
    <Movies>
        <Movie>
            <... attributes ...>
        </Movie>
        <Movie>
            <... attributes ...>
        </Movie>
    </Movies>
</Root>
class Program
{
    static void WriteShallowNode(XmlReader reader, XmlWriter writer)
    {
        if (reader == null)
        {
            throw new ArgumentNullException("reader");
        }
        if (writer == null)
        {
            throw new ArgumentNullException("writer");
        }

        switch (reader.NodeType)
        {
            case XmlNodeType.Element:
                writer.WriteStartElement(reader.Prefix, reader.LocalName, reader.NamespaceURI);
                writer.WriteAttributes(reader, true);
                if (reader.IsEmptyElement)
                {
                    writer.WriteEndElement();
                }
                break;
            case XmlNodeType.Text:
                writer.WriteString(reader.Value);
                break;
            case XmlNodeType.Whitespace:
            case XmlNodeType.SignificantWhitespace:
                writer.WriteWhitespace(reader.Value);
                break;
            case XmlNodeType.CDATA:
                writer.WriteCData(reader.Value);
                break;
            case XmlNodeType.EntityReference:
                writer.WriteEntityRef(reader.Name);
                break;
            case XmlNodeType.XmlDeclaration:
            case XmlNodeType.ProcessingInstruction:
                writer.WriteProcessingInstruction(reader.Name, reader.Value);
                break;
            case XmlNodeType.DocumentType:
                writer.WriteDocType(reader.Name, reader.GetAttribute("PUBLIC"), reader.GetAttribute("SYSTEM"), reader.Value);
                break;
            case XmlNodeType.Comment:
                writer.WriteComment(reader.Value);
                break;
            case XmlNodeType.EndElement:
                writer.WriteFullEndElement();
                break;
        }
    }
    public static bool Transform(XElement el)
    {

        el.Name = "a";

        return true;
    }
    static void Main(string[] args)
    {
        XmlReaderSettings readerSettings = new XmlReaderSettings();
        readerSettings.IgnoreWhitespace = false;
        var writer = XmlWriter.Create(File.OpenWrite(@"C:\dev\testout.xml"));
        var reader = XmlReader.Create(File.OpenRead(@"C:\dev\test.xml"), readerSettings);

        var flag = false;
        while (reader.Read())
        {
            if (reader.Name == "Movie")
            {
                var el = (XElement)XNode.ReadFrom(reader);
                if (Transform(el))
                    el.WriteTo(writer);
            }
            else
            {
                WriteShallowNode(reader, writer);
            }               
        }