【问题标题】:Using C# to Query XML where multiple child element have the same name使用 C# 查询多个子元素具有相同名称的 XML
【发布时间】:2016-10-03 18:59:28
【问题描述】:

我创建了一个包含多个元数据标签的 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";
}

但是,这不会为多个子元素具有相同名称的子元素返回值。关于如何检查所有同名子元素的查询有什么想法吗?

【问题讨论】:

    标签: c# asp.net xml visual-studio


    【解决方案1】:

    使用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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多