如何忽略XML中的空格和新行

时间:2012-09-13 08:34:10

标签: c# xml xml-parsing

我有一个XML文件,我将循环遍历节点并获取属性的值。

但是除了属性值,我还在输出中得到一些符号(矩形框)。如果我尝试删除空间 在标签之间然后很好。

在下面的XML中,我得到了标题的innertext。

 <catalog>
  <book id="bk101">
   <details>
    <title>XML Developer's Guide</title>
   </details>
  </book>
  </catalog>

如果我的输入是这样的话,那很好:

  <catalog>
   <book id="bk101">
   <details><title>XML Developer's Guide</title></details>
   </book>
  </catalog>

我正在使用C#

 foreach (XmlNode catalogid in Xmlcontent.GetElementsByTagName("catalog"))
      {
        foreach (XmlNode bookid in catalogid)
                    {
                        foreach (XmlNode titleid in bookid)
                        {
                       string booktitle = titleid.InnerText.ToString();
                        }
                     }
      }

请建议我如何忽略输出中的空格和新行。

2 个答案:

答案 0 :(得分:1)

您可以尝试使用基于PreserveWhitespace属性

的代码
XmlDocument doc = new XmlDocument();
....
....
doc.PreserveWhitespace = false;

链接:http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.preservewhitespace.aspx

答案 1 :(得分:1)

您是否仅限于使用.Net 2.0?如果是这样,请忽略以下内容。

如果您可以使用.Net 3.5,那么以下Linq-To-Xml将适合您。

  1. 首先加载文件
  2. 获取所有目录元素
  3. 然后选择目录中的所有书籍
  4. 获取图书ID&amp;标题
  5. 将所有目录中的所有书籍分配为一个变量书籍作为数组。
  6. XElement root = XElement.Load(file);
    var catalogs = root.Descendants("catalog");
    var books = catalogs.SelectMany(c => 
        c.Descendants("book").Select(book => new
        {
            Id = book.Attribute("id").Value,
            Title = book.Descendants("title").First().Value
        }))
        //.OrderBy(b => b.Title)  // sort by title or id if you'd like.
        .ToArray();