3

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

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

在下面的 XML 中,我得到了标题的内部文本。

 <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();
                        }
                     }
      }

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

4

2 回答 2

1

您可以根据PreserveWhitespace 属性尝试使用此代码

XmlDocument doc = new XmlDocument();
....
....
doc.PreserveWhitespace = false;

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

于 2012-09-13T09:04:26.007 回答
1

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

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

  1. 首先加载文件
  2. 像你一样获取所有目录元素
  3. 然后选择目录中的所有书籍
  4. 获取书籍 ID 和标题
  5. 将所有目录中的所有书籍作为数组分配到一个变量书籍中。

.

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();
于 2012-09-19T21:11:09.800 回答