【问题标题】:using xmlReader使用 xmlReader
【发布时间】:2012-09-26 14:06:39
【问题描述】:

我正在尝试读取一个 xml 字符串,然后通过插入另一个 xml 字符串来修改它,我不知道该怎么做,因为我是这个领域的初学者,所以我很挣扎。我在网上搜索,我真的很困惑 xmlWriter 和 xmlReader 因为我不想使用 xmlDocument 我从微软找到了这个 http://msdn.microsoft.com/en-us/library/cc189056(v=vs.95).aspx

所以我的代码是这样的

 String Mainxmltext = "<ClosedKPICalls>" +
    "<ServiceInfo>  <ServiceNo>HR011</ServiceNo> <ServiceName>Petty cash</ServiceName>    "+
    "<RecCount>0</RecCount>  <RegdKPI>2</RegdKPI>  </ServiceInfo> </ClosedKPICalls>";

    String xmlinnerText = "<TaskDetails> <name>Jhone</name> <Description>just for testing</Description> </TaskDetails>";

    StringBuilder output = new StringBuilder();
    using (XmlReader reader = XmlReader.Create(new StringReader(Mainxmltext)))
    {
        XmlWriterSettings ws = new XmlWriterSettings();
        ws.Indent = true;
        using (XmlWriter writer = XmlWriter.Create(output, ws))
        {

            // Parse the file and display each of the nodes.
            while (reader.Read())
            {
                switch (reader.NodeType)
                {

                    case XmlNodeType.Element:
                        writer.WriteStartElement(reader.Name);                           
                        break;
                    case XmlNodeType.Text:
                        writer.WriteString(reader.Value);

                        break;
                    case XmlNodeType.XmlDeclaration:
                    case XmlNodeType.ProcessingInstruction:
                        writer.WriteProcessingInstruction(reader.Name, reader.Value);
                        break;
                    case XmlNodeType.Comment:
                        writer.WriteComment(reader.Value);
                        break;
                    case XmlNodeType.EndElement:
                        writer.WriteFullEndElement();                           
                        break;
                }
            }
        }
    }


    MessageBox.Show(output.ToString());

}

所以我现在成功读取了第一个字符串我如何在我之前的意思的主要 xml 的结束标记之前插入第二个测试,我的 xml 应该看起来像这样

<ClosedKPICalls>
<ServiceInfo>  
<ServiceNo>HR011</ServiceNo> 
<ServiceName>Petty cash</ServiceName>  
<RecCount>0</RecCount>  
<RegdKPI>2</RegdKPI>  
</ServiceInfo>
<TaskDetails> 
<name>Jhone</name> 
<Description>just for testing</Description> 
</TaskDetails>
</ClosedKPICalls>

请帮忙 谢谢

【问题讨论】:

    标签: c# asp.net xml xmlreader


    【解决方案1】:

    Linq2Xml 更易于使用。

    String Mainxmltext = "<ClosedKPICalls>" +
            "<ServiceInfo>  <ServiceNo>HR011</ServiceNo> <ServiceName>Petty cash</ServiceName>    " +
            "<RecCount>0</RecCount>  <RegdKPI>2</RegdKPI>  </ServiceInfo> </ClosedKPICalls>";
    
    String xmlinnerText = "<TaskDetails> <name>Jhone</name> <Description>just for testing</Description> </TaskDetails>";
    
    XDocument xDoc = XDocument.Parse(Mainxmltext);
    xDoc.Root.Add(XElement.Parse(xmlinnerText));
    var newxml = xDoc.ToString();
    

    这就是你想要的xml的全部内容

    【讨论】:

    • XElement 不够用吗?我们真的需要 XDocument 吗?因为在xml中没有root,声明。
    • 感谢您的解决方案及其完美运行,但是如果我想在 MainxmlText 中的多个位置添加 xmlinnerText 怎么办,因为在这种情况下,它只会在最后一个标签之前添加它。 XDocument 也会影响内存吗?
    【解决方案2】:

    你想要实现的只是将一段 xml 插入一个 xml 字符串,你可以使用 XElement 类来实现。

    例如

    var xmlString = "<person></person>";
    
    var xEl = XElement.Parse(xmlString);
    
    xEl.Add(XElement.Parse("<name>vijay</name>"));
    
    Console.Writeline(XEl);
    

    O/P

    <person><name>vijay</name></person>
    

    谷歌XElement

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 2023-03-30
      • 1970-01-01
      相关资源
      最近更新 更多