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>

交換で大丈夫そうです。

ヘッダーを削除してもこのエラーが発生するため、? の付いたヘッダーに違いはないと思います。

.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 に答える