3

XSD スキーマが関連付けられていない外部 XML ドキュメントを流暢な .NET オブジェクトに変換したいと考えています。

次のような単純な XML ファイルがあります。

<application>
    <parameters>
        <param></param>
        <param></param>
    </parameters>
    <generation />
    <entities>
        <entity ID="1">
            <PropTest>Test</PropTest>
        </entity>
        <entity ID="2">
            <PropTest>Another Test</PropTest>
        </entity>
     </entities>
</application>

次のようにドキュメントをナビゲートしたいと思います。

var xConfig = new XmlConfig("file.xml");

// testValue should be assigned "Test"
string testValue = xConfig.Generation.Entities.Entity(1).PropTest;

.NET 3.5 でこれを実現する最善の方法は何ですか?

4

6 に答える 6

2

答えを書いているときに、 LusidがLinq to SQLについても書いていることに気づきましたが、彼はXDocumentを使用していました。

これが私のバージョンです(file.xml質問で与えられたXMLです):

string testValue =
    (string) XElement.Load("file.xml")
        .Element("entities")
        .Elements("entity")
        .FirstOrDefault(entity => entity.Attribute("ID")
            .Value == "1") ?? string.Empty;
于 2009-01-20T15:50:33.397 に答える
2

おそらく、最近これを行う最良の方法は、Linq to XML を使用することです。XSD や複雑なクラス定義をいじるよりもはるかに簡単です。

XDocument doc = XDocument.Load("file.xml");
var val = doc
    .Descendants("entity")
    .Where(p => p.Attribute("ID").Value == "1")
    .Descendants("PropTest")
    .FirstOrDefault();
if (val != null)
    Console.WriteLine(val.Value);

私が使用したサンプル file.xml は次のとおりです。

<?xml version="1.0" encoding="utf-8" ?>
<application>
    <parameters>
        <param></param>
        <param></param>
    </parameters>
    <generation>
        <entities>
            <entity ID="1">
                <PropTest>Test</PropTest>
            </entity>
            <entity ID="2">Another Test</entity>
        </entities>
    </generation>
</application>
于 2009-01-20T15:34:39.577 に答える
1

Kevin Hazzard は、.NET 4.0 動的型パート 1およびパート 2を使用して、C# 用の流暢な XML インターフェイスを作成しました。これにより、次のようなコードが可能になります。

var v = dx.application.entities.entity[0].PropTest.Value;
于 2009-08-27T11:26:48.177 に答える
1

xsd.exeを見ます。使用方法に関するより有益なチュートリアルについては、こちらにアクセスすることもできます。

基本的に、XSD に相当する .NET クラスを作成します。その後、XML とオブジェクトをシリアライズおよびデシリアライズできます。

于 2009-01-20T15:03:59.480 に答える
0

スキーマを抽出するだけであれば (xsd.exe で簡単に実行できるはずです)、このオンライン ツール(ダウンロードも可能) が役に立ちます。

于 2009-01-20T15:20:49.633 に答える
0

ConfigurationSection/ConfigurationElement などから派生したクラスを定義します。それらは xml ファイルに適切にマップされます (これがビルドの目的です)。これについては MSDN を参照してください。もう 1 つの方法は、POCO オブジェクトを作成し、プロパティに XML シリアル化属性を設定してから、System.XML.XMLSerializer を使用して XML との間でシリアル化/逆シリアル化することです。XML シリアル化については、MSDN を参照してください。

于 2009-01-20T16:01:02.550 に答える