1

我有这段代码可以读取文本,然后将其解析为 XML:

var file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(@"Assets\levels.xml");
var stream = await file.OpenReadAsync();
var rdr = new StreamReader(stream.AsStream());
var contents = await rdr.ReadToEndAsync();
var cleanedContents = contents.Replace("\r\n", "").Replace( '\\', ' ');

var xmlElements = XDocument.Load(cleanedContents).Elements();
var levels = xmlElements.Descendants("Level");

这是 XML:

<?xml version="1.0" encoding="utf-8" ?>
<LevelLoader>
  <Level>
    <LevelNum>1</LevelNum>
      <Waves>
        <Wave>
          <WaveNum>1</WaveNum>
          <Background>
            <MinNoise>180</MinNoise>
            <MaxNoise>255</MaxNoise>
          </Background>
          <Objects>
            <Object>
              <Id>Sat</Id>
              <Position>
                <Required>1</Required>
                <X>2000</X>
                <Y>3000</Y>
              </Position>
            </Object>
          </Objects>
        </Wave>
      </Waves>
  </Level>
</LevelLoader>

调试器显示一堆回车和换行被拾取(\r\n):

<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n<LevelLoader>\r\n  <Level>\r\n    <LevelNum>1</LevelNum>\r\n      <Waves>\r\n        <Wave>\r\n          <WaveNum>1</WaveNum>\r\n          <Background>\r\n            <MinNoise>180</MinNoise>\r\n            <MaxNoise>255</MaxNoise>\r\n          </Background>\r\n          <Objects>\r\n            <Object>\r\n              <Id>Sat</Id>\r\n              <Position>\r\n                <Required>1</Required>\r\n                <X>2000</X>\r\n                <Y>3000</Y>\r\n              </Position>\r\n            </Object>\r\n          </Objects>\r\n        </Wave>\r\n      </Waves>\r\n  </Level>\r\n</LevelLoader>

我似乎可以通过替换来清除它。

我不认为带有?的标题有什么不同,因为即使我删除它,我仍然会收到这个错误。

我不知道如何删除额外的 \'s 因为 .replace('\', ' ') 似乎没有这样做。

<?xml version=\"1.0\" encoding=\"utf-8\" ?><LevelLoader>  <Level>    <LevelNum>1</LevelNum>      <Waves>        <Wave>          <WaveNum>1</WaveNum>          <Background>            <MinNoise>180</MinNoise>            <MaxNoise>255</MaxNoise>          </Background>          <Objects>            <Object>              <Id>Sat</Id>              <Position>                <Required>1</Required>                <X>2000</X>                <Y>3000</Y>              </Position>            </Object>          </Objects>        </Wave>      </Waves>  </Level></LevelLoader>

有了我仍然看到的所有内容:

路径中的非法字符。

有什么建议么?

4

1 回答 1

4

XDocument.Load() 需要一个路径;你正在传递一个字符串,所以你应该调用 Parse()

http://msdn.microsoft.com/en-us/library/bb343181.aspx

于 2013-03-06T03:44:13.090 回答