0

私がxmlファイルを持っているとしましょう:

<?xml version="1.0" encoding="utf-8"?>
<Test Description="Test XML" VersionFormat="123" ProtectedContentText="(Test test)">
    <Testapp>
        <TestappA>
            <A Id="0" Caption="Test 0" />
            <A Id="1" Caption="Test 1" />
            <A Id="2" Caption="Test 2" />
            <A Id="3" Caption="Test 3">
                <AA>
                    <B Id="4" Caption="Test 4" />
                </AA>
            </A>
        </TestappA>
        <AA>
            <Reason Id="5" Caption="Test 5" />
            <Reason Id="6" Caption="Test 6" />
            <Reason Id="7" Caption="Test 7" />
        </AA>
    </Testapp>
</Test>

このコードの目的はUnity3Dでこれを実行することであるため、LINQを使用せずにこのxmlから属性Captionの値を読み取る必要があります。これを実現するために一晩を費やした後、機能しないコードを作成しました。助けてください!

切り取られたコード:

// XML settings
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;                        

// Loop through the XML to get all text from the right attributes
using (XmlReader reader = XmlReader.Create(sourceFilepathTb.Text, settings))
{
    while (reader.Read())
    {
        if (reader.NodeType == XmlNodeType.Element)
        {
            if (reader.HasAttributes)
            {
                if (reader.GetAttribute("Caption") != null)
                {                                
                    MessageBox.Show(reader.GetAttribute("Caption"));
                }                            
            }
        }
    }
}
4

2 に答える 2

1

xml の処理方法は次のとおりです。まず、xml を使用して XmlDocument を読み込みます。

XmlDocument x = new XmlDocument();
x.Load("Filename goes here");

次に、属性を取得するには、いくつかのオプションがあります。すべてのキャプションだけが必要で、他には何も気にしない場合は、次のようにすることができます。

XmlNodeList xnl = x.GetElementsByTagName("A");
foreach(XmlNode n in xnl)
   MessageBox.Show(n.Attribute["Caption"].Value);

あなたが持っている要素タグごとにそれを繰り返します。

より良いアドバイスを提供する前に、お客様の要件について詳しく知る必要があります。

于 2012-11-07T15:20:37.160 に答える
0

XPathリストを取得するために使用できます

XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlstring); // Or use doc.Load(filename) to load from file
XmlNodeList attributes = doc.DocumentElement.SelectNodes("//@Caption");
foreach (XmlAttribute attrib in attributes)
{
    Messageox.Show(attrib.Value);
}

@ 表記を使用して、Caption属性を持つ現在のドキュメント内のすべてのノードを選択しています。xpath の詳細 - http://www.w3schools.com/xpath/xpath_syntax.asp

于 2012-11-07T15:31:30.623 に答える