2016-10-03 125 views
0

我已創建具有多個元數據標籤的文檔的XML文件。使用C#來查詢多個子元素具有相同名稱的XML

它看起來是這樣的:

<?xml version="1.0" encoding="utf-8" ?> 
<documents> 
    <document> 
    <name>Document 1</name> 
    <tag>Tag 1</tag> 
    <tag>tag 2</tag> 
    <tag>Tag 3 </tag> 
    <tag>Tag 4</tag> 
    </document> 
    <document> 
    <name>Document 2</name> 
    <tag>Tag 1</tag> 
    <tag>Tag 4</tag> 
    <tag>Tag 5</tag> 
    <tag>Tag 6</tag> 
    </document> 
    <document> 
    <name>Document 3</name> 
    <tag>Tag 3</tag> 
    <tag>Tag 4</tag> 
    <tag>Tag 5</tag> 
    <tag>Tag 7</tag> 
    </document> 
</documents> 

我希望用戶能夠輸入搜索詞(標籤中的一個),並使其返回有標籤的所有文件的名稱。

目前我使用下面的代碼來查詢我的XML:

String str = ""; 
var search = searchBox3.Text; 
var title = ""; 
var xmlMetaFilePath = Server.MapPath("XML/MetaDataTest.xml"); 
DataSet dsMetaDetails = new DataSet(); 
dsMetaDetails.ReadXml(xmlMetaFilePath);// Load XML in dataset 
DataTable updates = dsMetaDetails.Tables[0]; 
EnumerableRowCollection<DataRow> updateQuery = 
    from update in updates.AsEnumerable() 
    where update.Field<string>("tag") == search 
    select update; 
DataView updateView = updateQuery.AsDataView(); 
if (updateView.Count > 0) 
{ 

    foreach (DataRow row in updateQuery) 
    { 
     title = row.Field<string>("name"); 
     answer.Text = title; 
     str = str + title; 
    } 

    answer.Text = str; 
} 
else 
{ 
    answer.Text = "None"; 
} 

但是,這不會返回子元素,其中多個子元素具有相同的名稱值。任何想法如何檢查所有具有相同名稱的子元素的查詢?

回答

2

使用LINQ to Xml

string searchTag = "some tag"; 
XDocument file = XDocument.Load("filepath.xml"); 
var documents = file.Root 
        .Elements("document") 
        .Where(doc => doc.Elements("tag") 
            .Any(tag => tag.Value.Equals(searchTag)); 

foreach(var doc in documents) 
{ 
    string docName = doc.Element("name").Value; 
    Console.WriteLine(docName); 
} 
+0

真棒,謝謝!這樣可行! –

相關問題