1

XMLファイルで文字列を見つける方法を知りたいのですが。

これが私が持っているXMLファイルだと言ってください(これらはSQLサーバーインスタンスですが、無関係です)

<?xml version="1.0" encoding="utf-8" ?>
<Servernames>
    <loc country="Lockheed">
        <Servername>instance1\server1</Servername>
        <Servername>instance2\server2</Servername>
        <Servername>10.90</Servername>
    </loc>
    <loc country="SouthAmerica">
        <Servername>Hide your heart</Servername>
        <Servername>Bonnie Tyler</Servername>
        <Servername>10.0</Servername>
    </loc>
    <loc country="Britian">
        <Servername>Greatest\Hits</Servername>
        <Servername>Dolly\Parton</Servername>
        <Servername>this\is</Servername>
    </loc>
</Servernames>

したがって、ユーザーから任意の形式の文字列を取得します。たとえば、インスタンスのみを取得し、上記の場合はサーバーで始まるすべてのサーバー名をリストボックスに表示します。

instance1 \ server1
instance2 \serve2

など..これを実現する方法がわからない場合は、ストリームリーダーを開く必要がありますか、それともxmlファイルから文字列とブラウザを取得する必要がありますか?

更新しました

private void button1_Click(object sender, RoutedEventArgs e)
{
    textBox1.Clear();
    string fileName = "c:\\users\\xxxx\\documents\\visual studio 2010\\Projects\\WpfApplication2\\WpfApplication2\\XML.xml";

        var doc = XDocument.Load(fileName);
        var findString = "Server";

        var results = doc.Element("Servernames").Descendants("Servername").Where(d => d.Value.Contains(findString)).Select(d => d.Value);
        listBox1.Items.Add(results.ToString());
        textBox1.Text = results.ToString();
}

私は単にテキストボックスでこれを取得しています:System.Linq.Enumerable + WhereSelectEnumerableIterator`2 [System.Xml.Linq.XElement、System.String]

ここに画像の説明を入力してください

強力なテキストUPDATE2

.csファイルコード

private void button1_Click(object sender、RoutedEventArgs e){textBox1.Clear();

        string fileName = "c:\\users\\xxxxx\\documents\\visual studio 2010\\Projects\\WpfApplication2\\WpfApplication2\\XML.xml";

        var doc = XDocument.Load(fileName);
        var findString = "Server";

        var results = doc.Element("Servernames").Descendants("Servername").Where(d => d.Value.Contains(findString)).Select(d => d.Value);

        Servers = new ObservableCollection<string>(results);

        MessageBox.Show("THis is loaded");

    }

XAMLは次のようになります

<ListBox   Height="200" HorizontalAlignment="Left" Margin="200,44,0,0" x:Name="ListBox1" VerticalAlignment="Top" Width="237">

ここに画像の説明を入力してください

4

2 に答える 2

4

XMLをXDocumentにロードすると仮定すると、このようなことができます。

string fileName = "c:\\users\\xxxxx\\documents\\visual studio 2010\\Projects\\WpfApplication2\\WpfApplication2\\XML.xml";

var doc = XDocument.Load(fileName);
var findString = "server";

var results = doc.Element("Servernames").Descendants("Servername").Where (d => d.Value.Contains(findString)).Select (d => d.Value);

編集-WPFの例

XAML:

<ListBox ItemSource="{Binding Servers}"/>

DataContext:

public ObservableCollection<string> Servers {get; set;}

string fileName = "c:\\users\\xxxxx\\documents\\visual studio 2010\\Projects\\WpfApplication2\\WpfApplication2\\XML.xml";

var doc = XDocument.Load(fileName);
var findString = "server";

var results = doc.Element("Servernames").Descendants("Servername").Where (d => d.Value.Contains(findString)).Select (d => d.Value);

Servers = new ObservableCollection<string>(results);

Edit2-datacontextのないWPFの例。MVVMアプローチは、WPF開発の標準になりつつあるため、よく読んでおくことをお勧めします。暫定的にこれを使用してください。

XAML:

<ListBox x:Name="ListBox1" />

DataContext:

string fileName = "c:\\users\\xxxxx\\documents\\visual studio 2010\\Projects\\WpfApplication2\\WpfApplication2\\XML.xml";

var doc = XDocument.Load(fileName);
var findString = "server";

var results = doc.Element("Servernames").Descendants("Servername").Where (d => d.Value.Contains(findString)).Select (d => d.Value);

foreach(string result in results)
{
     ListBox1.Items.Add(result);
}
于 2012-04-13T01:39:51.263 に答える
1

XmlDocumentは次のように使用できます。

string xml = "<your xml>";
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
foreach (XmlNode xmlLoc in doc.DocumentElement.SelectNodes("loc"))
{
    foreach (XmlNode xmlServername in xmlLoc.SelectNodes("Servername"))
    {
        Debug.WriteLine(string.Format("Servername={0}", xmlServername.InnerText));
        // xmlServername.InnerText will be \instance1\server1, etc.
        // UPDATE: add item to listbox
        listBox1.Items.Add(xmlServername.InnerText);
    }
}
于 2012-04-13T01:48:11.087 に答える