1

私は .NET を初めて使用するので、XML について混乱しています。Windows Phone 7 用のアプリを作成しようとしていますが、XML を読み取ろうとするとコードが失敗します。式ウォッチャー e.Result によると、問題ありません。

解析しようとしている XML は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<Arrives>
  <Arrive>
    <IdStop>803</IdStop>
    <idLine>44</idLine>
    <IsHead>True</IsHead>
    <Destination>MARQUES DE VIANA</Destination>
    <IdBus>0000</IdBus>
    <TimeLeftBus>405</TimeLeftBus>
    <DistanceBus>978</DistanceBus>
    <PositionXBus>-1</PositionXBus>
    <PositionYBus>-1</PositionYBus>
    <PositionTypeBus>1</PositionTypeBus>
  </Arrive>
  <Arrive>
    <IdStop>803</IdStop>
    <idLine>12</idLine>
    <IsHead>True</IsHead>
    <Destination>MARQUES ZAFRA</Destination>
    <IdBus>0000</IdBus>
    <TimeLeftBus>466</TimeLeftBus>
    <DistanceBus>1016</DistanceBus>
    <PositionXBus>-1</PositionXBus>
    <PositionYBus>-1</PositionYBus>
    <PositionTypeBus>1</PositionTypeBus>
  </Arrive>
  <Arrive>
    <IdStop>803</IdStop>
    <idLine>44</idLine>
    <IsHead>True</IsHead>
    <Destination>MARQUES DE VIANA</Destination>
    <IdBus>0000</IdBus>
    <TimeLeftBus>1077</TimeLeftBus>
    <DistanceBus>2714</DistanceBus>
    <PositionXBus>-1</PositionXBus>
    <PositionYBus>-1</PositionYBus>
    <PositionTypeBus>1</PositionTypeBus>
  </Arrive>
  <Arrive>
    <IdStop>803</IdStop>
    <idLine>12</idLine>
    <IsHead>True</IsHead>
    <Destination>MARQUES ZAFRA</Destination>
    <IdBus>0000</IdBus>
    <TimeLeftBus>1089</TimeLeftBus>
    <DistanceBus>3260</DistanceBus>
    <PositionXBus>-1</PositionXBus>
    <PositionYBus>-1</PositionYBus>
    <PositionTypeBus>1</PositionTypeBus>
  </Arrive>
</Arrives>

System.Xml.Linq と System.Collections を使用した C# のコードは次のとおりです。

 XElement xmlEMTStop = XElement.Parse(e.Result);

            foreach (XElement arriveElement in xmlEMTStop.Descendants())
            {
                // Recojemos los elementos en el XML
                stopElement readElement = new stopElement();
                readElement.idStop = (string)arriveElement.Element("idStop").Value;
                readElement.idLine = (string)arriveElement.Element("idLine").Value;
                readElement.destination = (string)arriveElement.Element("Destination").Value;
                readElement.timeLeftBusRaw = (string)arriveElement.Element("TimeLeftBus").Value;
(...)
4

2 に答える 2

2

あなたはすべての子孫を求めていますが、それらには、などのサブ要素があると仮定しています。あなたはそれの外見によって、すべての要素を求めているべきです:idStopidLineArrive

foreach (XElement arriveElement in xmlEMTStop.Descendants("Arrive"))

次に、LINQtoXMLでは大文字と小文字が区別されることを知っておく必要があります。したがって、この:

readElement.idStop = (string)arriveElement.Element("idStop").Value;

する必要があります:

readElement.idStop = arriveElement.Element("IdStop").Value;

あるいは単に:

readElement.idStop = (string) arriveElement.Element("IdStop");

または:readElement.idStop = ArrivateElement.Element( "IdStop")。Value;

Valueプロパティはすでにを返しますstringが、別の方法はとの間の明示的な変換を呼び出すことXElementですstring。)

次に、要素を作成した後、要素で何をしているのかは明確ではありませんが、要素のコレクションを作成しようとしている場合は、LINQを再度使用できます。

var query = XElement.Parse(e.Result)
                    .Descendants("Arrive")
                    .Select(x => new StopElement {
                                IdStop = (string) x.Element("IdStop"),
                                IdLine = (string) x.Element("IdLine"),
                                Destination = (string) x.Element("Destination"),
                                TimeLeftBus = (string) x.Element("TimeLeftBus")
                            })
                    .ToList();

タイプとプロパティ名の大文字と小文字を.NETの規則に従うように変更したことに注意してください。一部のプロパティのタイプを変更することもできます。たとえばTimeLeftBus、ある種の数値タイプのように見えます。

于 2012-11-05T19:11:05.023 に答える
0

のように試してみてください

XDocument xdoc = XDocument.Load("data.xml");

var arrivesItems = from c in doc.Root.Descendants("Arrive") select c;

foreach (var item in arrivesItems) {

var idStop = item.Element("idStop").Value;
...

}
于 2012-11-05T19:17:59.497 に答える