簡體   English   中英

使用C#查詢多個子元素具有相同名稱的XML

[英]Using C# to Query XML where multiple child element have the same name

我創建了帶有多個元數據標簽的Documents 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";
}

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

使用LINQ轉換為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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM