如何在没有C#中的其他换行符和制表符的情况下解析XML内容?

时间:2011-07-12 08:09:08

标签: c# .net xml

我正在使用以下xml文件来读取我需要写入的文件的内容:

<properties>
    <url>http://www.leagueoflegends.com/service-status</url>
    <content>host=beta.lol.riotgames.com
xmpp_server_url=chat.na.lol.riotgames.com
lobbyLandingURL=http://www.leagueoflegends.com/pvpnet_landing
ladderURL=http://www.leagueoflegends.com/ladders
storyPageURL=http://www.leagueoflegends.com/story
lq_uri=https://lq.na.lol.riotgames.com/login-queue/rest/queue</content>
</properties>

我故意让内容元素只有换行符而不是其他内容(而不是正确的格式)。 但是,当我将内容元素读取到字符串时,它会在行的开头添加几个换行符和制表符。通过写入文本文件得到的结果如下:

<imaginary newline here>
        host=beta.lol.riotgames.com
        xmpp_server_url=chat.na.lol.riotgames.com
        lobbyLandingURL=http://www.leagueoflegends.com/pvpnet_landing
        ladderURL=http://www.leagueoflegends.com/ladders
        storyPageURL=http://www.leagueoflegends.com/story
        lq_uri=https://lq.na.lol.riotgames.com/login-queue/rest/queue
<imaginary newline here><additional tab here>

这里的问题是我需要该文本只是从第一行开始,没有标签,没有空格,只有新行。

阅读内容标记的C#代码是:

XDocument root = XDocument.Parse(File.ReadAllText(file), LoadOptions.PreserveWhitespace);
PropertyFile PF = new PropertyFile();
PF.Content = (from Content in root.Descendants("content")
              select (string)Content.Value).Single();

文件是文件的路径,因为我能够阅读其他所有内容。

非常感谢任何想法。

提前致谢

修改 前面的PropertyFile类代码(内容只是一个字符串,用于保存我正在阅读的文件类型的一个文件的数据):

class PropertyFile
{
    public Uri URI { get; set; }
    public string Name { get; set; }
    public string Path { get; set; }
    public string Content { get; set; }
}

文件的所需输出是:

host=beta.lol.riotgames.com
xmpp_server_url=chat.na.lol.riotgames.com
lobbyLandingURL=http://www.leagueoflegends.com/pvpnet_landing
ladderURL=http://www.leagueoflegends.com/ladders
storyPageURL=http://www.leagueoflegends.com/story
lq_uri=https://lq.na.lol.riotgames.com/login-queue/rest/queue

3 个答案:

答案 0 :(得分:2)

默认情况下,XDocument / XElement的序列化格式(即缩进)xml片段。

尝试使用:

root.Save("Root.xml", SaveOptions.DisableFormatting);

但是,任何DOM操作都不会涉及无关紧要的空格/制表符。你在元素中写的是你得到的。

答案 1 :(得分:1)

尝试将LoadOptions设置为无:

XDocument root = XDocument.Parse(File.ReadAllText(file), LoadOptions.None);

根据MSDN,这将忽略所有无关紧要的空白。

我尝试了它(只有一个字符串表示你的XML - 我没有费心从文件中加载它)并获得以下内容:

主机= beta.lol.riotgames.com xmpp_server_url = chat.na.lol.riotgames.com lobbyLandingURL = HTTP://www.leagueoflegends.com/pvpnet_landing ladderURL = HTTP://www.leagueoflegends.com/ladders storyPageURL = HTTP://www.leagueoflegends.com/story lq_uri = HTTPS://lq.na.lol.riotgames.com/login-queue/rest/queue

这就是你要找的东西吗?

已编辑添加我使用的代码

string xml = @"<properties>
<url>http://www.leagueoflegends.com/service-status</url>
<content>host=beta.lol.riotgames.com

xmpp_server_url = chat.na.lol.riotgames.com lobbyLandingURL = HTTP://www.leagueoflegends.com/pvpnet_landing ladderURL = HTTP://www.leagueoflegends.com/ladders storyPageURL = HTTP://www.leagueoflegends.com/story lq_uri = HTTPS://lq.na.lol.riotgames.com/login-queue/rest/queue “;

XDocument root = XDocument.Parse(xml, LoadOptions.None);
var content = (from Content in root.Descendants("content")
               select (string)Content.Value).Single();

答案 2 :(得分:1)

如果你尝试,你会得到什么??

using System.IO;

XDocument root = XDocument.Parse(File.ReadAllText(file),
                              LoadOptions.PreserveWhitespace); 
string content = (from Content in root.Descendants("content")
                   select (string)Content.Value).Single();
File.WriteAllText("SomeTempFile.txt", content);

我怀疑此文本文件将按预期格式化。这表示PropertyFile存在问题。