0

このコードを記述すると、親タグの値のみが取得されます。childnodes の値も取得したいのですが、教えてください。

XmlDocument DOC = new XmlDocument();
DOC.RemoveAll();
DOC.Load("C:\\Users\\DIGITEL EYE SYSTEM\\Desktop\\response.xml");

foreach (XmlNode AllNodes in ParentNode)
{
    Project.Name = AllNodes["Name"].InnerText;
    if (AllNodes.ChildNodes == DOC.GetElementsByTagName("AppBuilderForms"))
    {
        //  Project.Forms = DOC.GetElementsByTagName("");
        // String sb = AllNodes["Forms"].InnerText;
    }
    else if (AllNodes.ChildNodes==DOC.GetElementsByTagName("CheckMarkObject"))
    {
        checkmark.Name = AllNodes["Name"].InnerText;
        checkmark.Label = AllNodes["Label"].InnerText;
        // checkmark.IsChecked = AllNodes["IsChecked"].InnerText;
    }
    else if (ParentNode == DOC.GetElementsByTagName("DateTimeObject"))
    {
        DateTime.Name = AllNodes["Name"].InnerText;
        DateTime.Label = AllNodes["Label"].InnerText;
    }
    else if (ParentNode == DOC.GetElementsByTagName("LocationObject"))
    {
        Location.Name = AllNodes["Name"].InnerText;
        Location.Label = AllNodes["Label"].InnerText;
        Location.Longitude = AllNodes["Longitude"].InnerText;
        Location.Latitude = AllNodes["Latitude"].InnerText;
    }
    else if (ParentNode==DOC.GetElementsByTagName("SwitchObject"))
    {
        Switch.Name = AllNodes["Name"].InnerText;
        Switch.Label = AllNodes["Label"].InnerText;
        // Switch.IsChecked =AllNodes["IsChecked"].InnerText;
    }
    else if(ParentNode==DOC.GetElementsByTagName("TextViewObject")) 
    {
        TextView.Name = AllNodes["Name"].InnerText;
        TextView.Value = AllNodes["Value"].InnerText;
    }
    else if (ParentNode ==DOC.GetElementsByTagName("TextFieldObject"))
    {
        TextField.Name = AllNodes["Name"].InnerText;
        TextField.Value = AllNodes["Value"].InnerText;
    }
    else if (ParentNode == DOC.GetElementsByTagName("PhotoPickerObject"))
    {
        PhotoPicker.Name = AllNodes["Name"].InnerText;
        PhotoPicker.Label = AllNodes["Label"].InnerText;
    }
    else if (ParentNode == DOC.GetElementsByTagName("SpinWheelPickerObject"))
    {
        SpinWheelPicker.Name = AllNodes["Name"].InnerText;
        SpinWheelPicker.Label = AllNodes["Label"].InnerText;
        // SpinWheelPicker.Columns = AllNodes["Columns"].InnerText;
    }
}
4

1 に答える 1

1
var xdoc = XDocument.Load(@"C:\Users\DIGITEL EYE SYSTEM\Desktop\response.xml");
    var allElements = xdoc.Root.Elements();
    foreach (string element in allElements)
    {
        //TODO add logic
    }

まず、xmlをXDocument(.Net 3.5が必要)にロードし
ます。ここでは何も奇妙なことはありません。

次に、ルートノードとルートの下のすべての要素をIEnumrableに選択します。ここでElements()メソッドにフィルターを追加できます。

3番目に、IEnumerableの要素の反復を開始し、それらを暗黙的に文字列にキャストします。これは、XElement.Valueを返すだけのLINQ to XML libの演算子です(したがって、より読みやすいと思う場合、または要素全体が必要な場合)他の理由でそれを書いてください!allElementsのIE XElement要素)

XmlDocumentでそれを行う方法がわからない、私は完全に忘れてしまった、うまくいけば、これはあなたがその道を進む場合に役立つかもしれない(しゃれが意図されている)。

于 2012-10-30T13:58:58.213 に答える