0

構造がかなり不十分な外部 xml フィードがあるため、直接逆シリアル化する方法がわかりません。

アセンブリで System.IO.Linq を使用できないため、私が知っている唯一の解決策は使用できません。

このxmlの例は

<body>
    <route>
        <stop tag="Info I need to get"/>
        <stop tag="Info I need to get"/>
        <path>
            <point tag="info I need to get"/>
            <point tag="info I need to get"/>
            <point tag="info I need to get"/>
        </path>
        <path>
            <point tag="info I need to get"/>
        </path>
        <path>
            <point tag="info I need to get"/>
            <point tag="info I need to get"/>
        </path>
    </route>
</body>

何らかの方法ですべてのパス ポイントを配列に解析できれば、タグ内のデータを簡単に取得できます。

私が参照していたlinqソリューションは、How to parse multiple single xml elements in .Net C#で言及されています

4

5 に答える 5

3

XPathを使用して、tag属性を持つすべてのノードを選択できます

XmlDocument doc = new XmlDocument();
doc.Load("myfile.xml");

foreach (XmlElement node in doc.SelectNodes("//*[@tag]"))
{
    Console.WriteLine(node.Name + ": " + node.GetAttribute("tag"));
}
于 2012-11-16T17:16:14.480 に答える
2

XmlDocumentを使用できますか?

XPath をうまくナビゲートできるようにするには、XPath を学ぶ必要があるかもしれませんが、これでうまくいくはずです。

次のような簡単なこともできます。

XmlDocument doc = new XmlDocument();
doc.Load("myfile.xml");
foreach(XmlNode node in doc.SelectNodes("point"))
{
    var valueYouWant = node.Attributes["tag"].Value;
    // etc.
} 
于 2012-11-16T17:09:09.383 に答える
2

正確なノード数がわからないので、配列リストを使用することをお勧めします

ArrayList list = new ArrayList();
XmlDocument doc = new XmlDocument();
doc.Load("sample.xml");
XmlElement root = doc.DocumentElement;
XmlNodeList nodes = root.SelectNodes("point"); // You can also use XPath here
foreach (XmlNode node in nodes)
{
   list.Add(node);
}
于 2012-11-16T17:09:08.903 に答える
0

もう 1 つの方法は、xml リーダーXML リーダー MSDNを使用することです。タイプパスの要素を検索し、属性の読み取りに似た方法を使用して属性データを読み込むことができます。

于 2012-11-16T17:21:52.923 に答える
0

XmlSerializer を使用できます。

良い例を次に示します。単純な XmlSerializer の例

これにより、ストレージ用にオブジェクトをシリアル化できます。

于 2012-11-16T17:11:51.700 に答える