Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#Windows窗体中与XML一起使用GetElementsByTagName_C#_Xml_Getelementsbytagname - Fatal编程技术网

在C#Windows窗体中与XML一起使用GetElementsByTagName

在C#Windows窗体中与XML一起使用GetElementsByTagName,c#,xml,getelementsbytagname,C#,Xml,Getelementsbytagname,我正在从一个安全的网站加载一个xml页面,我想用xml文档阅读它 xml的一部分: <ActueleVertrekTijden> <VertrekkendeTrein> <RitNummer>5070</RitNummer> <VertrekTijd>2015-03-20T19:42:00+0100</VertrekTijd> <EindBestemming>Den Haag Cent

我正在从一个安全的网站加载一个xml页面,我想用xml文档阅读它

xml的一部分:

<ActueleVertrekTijden>
  <VertrekkendeTrein>
    <RitNummer>5070</RitNummer>
    <VertrekTijd>2015-03-20T19:42:00+0100</VertrekTijd>
    <EindBestemming>Den Haag Centraal</EindBestemming>
    <TreinSoort>Sprinter</TreinSoort>
    <RouteTekst>Lage Zwaluwe, Dordrecht, Rotterdam C.</RouteTekst>
    <Vervoerder>NS</Vervoerder>
    <VertrekSpoor wijziging="false">6</VertrekSpoor>
 </VertrekkendeTrein>
 <VertrekkendeTrein>
    <RitNummer>1971</RitNummer>
    <VertrekTijd>2015-03-20T19:50:00+0100</VertrekTijd>
    <EindBestemming>Venlo</EindBestemming>
    <TreinSoort>Intercity</TreinSoort>
    <RouteTekst>Tilburg, Eindhoven, Helmond</RouteTekst>
    <Vervoerder>NS</Vervoerder>
    <VertrekSpoor wijziging="false">4</VertrekSpoor>
    <Opmerkingen> // This is not always available, but it is important and specific for a 'VertrekkendeTrein'
      <Opmerking>Rijdt vandaag niet</Opmerking>
        </Opmerkingen>
    </VertrekkendeTrein>
我现在遇到的问题是无法在LoadXml中加载ns[0].InnerXml。没有结果

编辑:

现在,我使用以下方法:

string urlo = "website";
            string resultje = HttpGeto(urlo);
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(resultje);

            XmlNodeList ns = xmlDoc.GetElementsByTagName("VertrekkendeTrein");

            var element = ns[0] as XmlElement;
            XmlNodeList nsvertrektijdje = element.GetElementsByTagName("RouteTekst");
            var vty1 = nsvertrektijdje[0].InnerText;
            MessageBox.Show(vty1);

但是它仍然不起作用

您不能使用
InnerXml
,因为它不包括
VertrekkendeTrein
节点,因此它不是有效的xml文档(文档只能有一个根节点)。您可以使用
OuterXml
,但这是浪费,因为您已经解析了XML

这里最好的方法是将
XmlNode
强制转换为
xmlement
并使用
GetElementsByTagName
方法

var element = ns[0] as XmlElement;
XmlNodeList nsvertrektijdje = element.GetElementsByTagName("RouteTekst");
完整代码现在如下所示:

var xml = @"<ActueleVertrekTijden>
<VertrekkendeTrein>
    <RitNummer>5070</RitNummer>
    <VertrekTijd>2015-03-20T19:42:00+0100</VertrekTijd>
    <EindBestemming>Den Haag Centraal</EindBestemming>
    <TreinSoort>Sprinter</TreinSoort>
    <RouteTekst>Lage Zwaluwe, Dordrecht, Rotterdam C.</RouteTekst>
    <Vervoerder>NS</Vervoerder>
    <VertrekSpoor wijziging=""false"">6</VertrekSpoor>
</VertrekkendeTrein>
<VertrekkendeTrein>
    <RitNummer> 1971 </RitNummer>
    <VertrekTijd> 2015 - 03 - 20T19: 50:00 + 0100 </VertrekTijd >
    <EindBestemming> Venlo </EindBestemming>
    <TreinSoort> Intercity </TreinSoort>
    <RouteTekst> Tilburg, Eindhoven, Helmond </RouteTekst>
    <Vervoerder> NS </Vervoerder>
    <VertrekSpoor wijziging = ""false""> 4 </VertrekSpoor>
    <Opmerkingen>   // This is not always available, but it is important and specific for a 'VertrekkendeTrein'
    <Opmerking> Rijdt vandaag niet</Opmerking>
   </Opmerkingen>
</VertrekkendeTrein></ActueleVertrekTijden>";

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);

XmlNodeList ns = xmlDoc.GetElementsByTagName("VertrekkendeTrein");
var element = ns[0] as XmlElement;
XmlNodeList nsvertrektijdje = element.GetElementsByTagName("RouteTekst");
var vty1 = nsvertrektijdje[0].InnerText;
MessageBox.Show(vty1);
var xml=@”
5070
2015-03-20T19:42:00+0100
登哈格中心酒店
短跑运动员
荷兰鹿特丹多德雷赫特茨瓦卢韦酒店。
NS
6.
1971
2015-03-20T19:50:00+0100
文洛
城际
蒂尔堡、埃因霍温、赫尔蒙
NS
4.
//这并不总是可用的,但对于“VertrekkendeTrein”来说非常重要和具体
里杰特·范达格·尼特
";
XmlDocument xmlDoc=新的XmlDocument();
LoadXml(xml);
XmlNodeList ns=xmlDoc.GetElementsByTagName(“VertrekkendeTrein”);
var element=ns[0]作为XmlElement;
XmlNodeList nsvertrektijdje=element.GetElementsByTagName(“routetetkst”);
var vty1=nsvertrektijdje[0]。InnerText;
MessageBox.Show(vty1);

问题在于,由于ns[0].InnerXml没有根节点,因此无法解析内部xml。 尝试在加载xml时附加临时节点

xd1.LoadXml("<data>" + ns[0].InnerXml + "</data>");
xd1.LoadXml(“+ns[0].InnerXml+”);

我更改了代码,但仍然没有发生任何事情,我是否必须更改var vty1=nsvertrektijdje[0]?不,在您的代码中接受我的修改对我的测试非常有效。我更新了答案以包含我的完整测试代码。虽然不是答案,但您一定要查看XDocument。
xd1.LoadXml("<data>" + ns[0].InnerXml + "</data>");