URLでいっぱいのXMLを使用して、学校用のpingアプリケーションを作成しています。 XmlNode.Value
がnullになったため、1時間失われました。
それからInnerText
に変更しましたが、うまくいきました。
MSDNは.Valueがノードの値を返し、InnerText
がノードとそのすべての子ノードの連結された値を返すとMSDNが言っているので、違いは何だろうと思いました。
誰かが私にこれを説明してもらえますか?
<sites>
<site>
<url>www.test.be</url>
<email>[email protected]</email>
</site>
<site>
<url>www.temp.be</url>
<email>[email protected]</email>
</site>
<site>
<url>www.lorim.ipsum</url>
<email>[email protected]</email>
</site></sites>
たとえば、XMLが<Foo>Bar</Foo>
その後、「バー」は実際には別のノードと見なされます:XmlText
ノード(XmlNode
からサブクラス化)。そのValue
ノードのXmlText
プロパティは「Bar」になります。
「Foo」はXmlElement
(XmlNode
からサブクラス化されている)と見なされます。 XmlNode.Value
は、ノードのタイプに基づいて異なるものを返します。 Value
がnull
ノードに対して常にElement
を返すことを示す this table を参照してください。
FooノードのInnerText
は、子の値(この場合は1つのXmlText
ノードのみ)を連結するため、「Bar」を返します。
同様の状況がありました。私がしたことは、現在のノードの最初の子を選択し、それがXMLtextであるかどうかを確認し、その値を表示したことです。
XmlNodeList xNList = xDOC.SelectNodes("//" + XMLElementname);
foreach (XmlNode xNode in xNList)
{
if (xNode.ChildNodes.Count == 1 &&
xNode.FirstChild.GetType().ToString() == "System.Xml.XmlText")
{
XMLElements.Add(xNode.FirstChild.Value);
}
else
{
XMLElements.Add("This is not a Leaf node");
}
}
XML仕様は、用語と、どのタイプのXMLオブジェクトを構成するかについて非常に慎重です。前述のように、element
には値がありません。 attribute
にはattribute
にはない構文、つまりname='value'
があるため、これはelement
(およびおそらく他のいくつかのノードタイプ)に固有です。
混乱していると思われる場合は、子と子孫の違い、またはルートNodeとドキュメント要素!
[〜#〜] msdn [〜#〜] に関して、Value
プロパティのXmlNodeType.Element
返却値:
ヌル。 XmlElement.InnerTextまたはXmlElement.InnerXmlプロパティを使用して、要素ノードの値にアクセスできます。
Url要素はリーフノードであるため、InnerText(InnerXml)プロパティには要素値が含まれます。要素ノードの場合、msdnのドキュメント https://msdn.Microsoft.com/en-us/library/system.xml.xmlnode.value(v = VS.110)に示されているように、valueプロパティはnullになります。 aspx 。