asp中的xml读写

时间:2011-02-20 09:28:07

标签: c# asp.net xml

我想在asp.net中使用c#读取xml文件并写入我试过这段代码

using (XmlReader reader = XmlReader.Create(Server.MapPath("TestXml.xml")))

        { 

            reader.Read();

            while (reader.Read())
            {
                Response.Write( reader.Value.ToString());
                Response.Write("<br />");

            } 

        }

,输出为:

,xml是

     <?xml version="1.0" encoding="utf-8" ?>
      <note>
      <to>Chayem</to>
      <from>Shaul</from>
      <heading>Way?</heading>
      <body>because</body>
      </note>

我该怎么办?谢谢。

3 个答案:

答案 0 :(得分:2)

XmlReader.Read()始终处理文档中的下一个节点。注意:节点,而不是元素。如果您单步执行该代码并检查每个节点,您将看到虽然XML文档中只有六个元素,但XmlReader正在处理11个节点。

这是因为您的XML文档(与大多数文档一样)的文本节点包含元素之间的空白字符。您的代码正在撰写<br/&gt;每次XmlReader遇到节点时的响应。每当XmlReader遇到带有文本内容的元素时,你想要写出一个。

这样做的一种方法是简单地只写出包含空格以外的东西的节点,例如:

if (!string.IsNullOrEmpty(reader.Value.ToString().Trim())
{
   Response.Write(reader.Value.ToString())
   Response.Write("<br/>");
}

但为什么你甚至使用XmlReader?有更简单的方法来生成此输出。例如,将XML加载到XDocument中,您可以生成如下输出:

Response.Write(string.Join("<br/>", doc.Descendants()
   .Where(x => (!string.IsNullOrEmpty(x.Value.ToString().Trim())
   .Select(x => x.Value.ToString())
   .ToArray());

答案 1 :(得分:0)

我认为问题在于XmlReader还会读取XML的\n部分。

尝试使用以下内容:

using (XmlReader reader = XmlReader.Create(Server.MapPath("feedback.xml")))
{
    while (reader.Read())
    {
        if (reader.Value == "\n")
        {
            Response.Write("<br />");
        }
        else
        {
            Response.Write(reader.Value);
        }
    }
}

编辑:您已经说过输出中每行之间的空格太多了。考虑到XmlReader还会读取\n个字符,使用您的方法在结果中添加额外的空行。我的解决方案是仅在读者遇到新行时插入<br />标记。

答案 2 :(得分:0)

写作示例:

public void WriteXml(List<string> filePaths, List<string> fileName)
        {
            //creating xml file
            XmlElement mainNode, descNode;
            XmlText pathText, nameText;

            XmlDocument xmlDoc = new XmlDocument();

            // Write down the XML declaration
            XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null);

            // Create the root element
            XmlElement rootNode = xmlDoc.CreateElement("ImageStore");
            xmlDoc.InsertBefore(xmlDeclaration, xmlDoc.DocumentElement);
            xmlDoc.AppendChild(rootNode);

            for (int i = 0; i < filePaths.Count; i++)
            {
                //Console.WriteLine("first xml image "+i);
                // Create a new <Category> element and add it to the root node
                XmlElement parentNode = xmlDoc.CreateElement("Image");

                // Set attribute name and value!
                parentNode.SetAttribute("ID", "01");

                xmlDoc.DocumentElement.PrependChild(parentNode);

                // Create the required nodes
                mainNode = xmlDoc.CreateElement("URL");
                descNode = xmlDoc.CreateElement("Name");
                //XmlElement activeNode = xmlDoc.CreateElement("Active");

                // retrieve the text
                pathText = xmlDoc.CreateTextNode(filePaths[i]);
                nameText = xmlDoc.CreateTextNode(fileName[i]);
                XmlText activeText = xmlDoc.CreateTextNode("true");

                // append the nodes to the parentNode without the value
                parentNode.AppendChild(mainNode);
                parentNode.AppendChild(descNode);
                parentNode.AppendChild(activeNode);

                // save the value of the fields into the nodes
                mainNode.AppendChild(pathText);
                descNode.AppendChild(nameText);
                activeNode.AppendChild(activeText);



            }//end of for loop

            // Save to the XML file. Checks if previous file exist
            if (File.Exists(Application.StartupPath + "/imageStore.xml"))
            {
                File.Delete(Application.StartupPath + "/imageStore.xml");
                xmlDoc.Save(Application.StartupPath + "/imageStore.xml");
            }
            else
            {
                xmlDoc.Save(Application.StartupPath + "/imageStore.xml");
            }

            //return true;
        }//end of writeXml

阅读例子:

XmlDocument doc = new XmlDocument();
            doc.Load("./config.xml");

            XmlNodeList configSet = doc.GetElementsByTagName("config");

            foreach (XmlNode node in configSet)
            {
                XmlElement conElement = (XmlElement)node;

                configData.Add("raw",conElement.GetElementsByTagName("raw")[0].InnerText);


                //Console.WriteLine(raw + " space " + store + " space " + achieve + " space " + filter);
            }

xml文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<ConfigFile>
<config>
 <raw>./raw/</raw>
 <store>./images/</store>
 <achieve>./achieve/</achieve>
<filter>*.jpg;*.png;*.gif</filter>
</config>
</ConfigFile>

希望这有助于你