首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何过滤XmlNodeList

如何过滤XmlNodeList
EN

Stack Overflow用户
提问于 2017-06-03 06:41:50
回答 2查看 5.4K关注 0票数 3

我有一组数据xml节点列表,我想要过滤一个特定属性的内部文本,我尝试过这样做,但没有任何效果。我在这里的代码以及发布的xml数据

代码语言:javascript
复制
string baseName = categoryName.Split(':').Last();
            int categoryId = 0;
            string xmlFile = File.ReadAllText(Application.StartupPath + @"\EbayCategories\EbayCategories.xml");
            XmlDocument xmldoc = new XmlDocument();
            xmldoc.LoadXml(xmlFile);
            XmlNodeList nodeList = xmldoc.SelectNodes("/CategoryArray/Category[CategoryName='" + baseName + "']");
            if (nodeList.Count > 0)
            {
                var memberNames = nodeList.Cast<XmlNode>().Where(node => node.Attributes["CategoryID"].InnerText == "58193").ToList();
                categoryId = int.Parse(nodeList[0]["CategoryID"].InnerText);
            }

这是我的xml数据。我想过滤CategoryParentID =我的值。

代码语言:javascript
复制
<CategoryArray>
    <Category>
        <BestOfferEnabled>true</BestOfferEnabled>
        <AutoPayEnabled>true</AutoPayEnabled>
        <CategoryID>20081</CategoryID>
        <CategoryLevel>1</CategoryLevel>
        <CategoryName>Antiques</CategoryName>
        <CategoryParentID>20081</CategoryParentID>
    </Category>
    <Category>
        <BestOfferEnabled>true</BestOfferEnabled>
        <AutoPayEnabled>true</AutoPayEnabled>
        <CategoryID>37903</CategoryID>
        <CategoryLevel>2</CategoryLevel>
        <CategoryName>Antiquities</CategoryName>
        <CategoryParentID>20081</CategoryParentID>
    </Category>
    <Category>
        <BestOfferEnabled>true</BestOfferEnabled>
        <AutoPayEnabled>true</AutoPayEnabled>
        <CategoryID>37908</CategoryID>
        <CategoryLevel>3</CategoryLevel>
        <CategoryName>The Americas</CategoryName>
        <CategoryParentID>37903</CategoryParentID>
        <LeafCategory>true</LeafCategory>
    </Category>
    <Category>
        <BestOfferEnabled>true</BestOfferEnabled>
        <AutoPayEnabled>true</AutoPayEnabled>
        <CategoryID>162922</CategoryID>
        <CategoryLevel>3</CategoryLevel>
        <CategoryName>Byzantine</CategoryName>
        <CategoryParentID>37903</CategoryParentID>
        <LeafCategory>true</LeafCategory>
    </Category>

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-03 07:17:04

我已经完成了删除属性的小更改。

代码语言:javascript
复制
var node = nodeList.Cast<XmlNode>().Where(n => n["CategoryParentID"].InnerText == "58193").Select(x => x["CategoryID"].InnerText).SingleOrDefault();

完美的工作!

票数 2
EN

Stack Overflow用户

发布于 2017-06-03 08:28:19

使用Linq:

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            Category.categories = doc.Descendants("Category").Select(x => new Category() {
                BestOfferEnabled = (Boolean)x.Element("BestOfferEnabled"),
                AutoPayEnabled = (Boolean)x.Element("BestOfferEnabled"),
                CategoryID = (int)x.Element("CategoryID"),
                CategoryLevel = (int)x.Element("CategoryLevel"),
                CategoryName = (string)x.Element("CategoryName"),
                CategoryParentID = (int)x.Element("CategoryParentID"),
            }).ToList();

            int id = 37903;

            Category categoryId = Category.categories.Where(x => x.CategoryParentID == id).FirstOrDefault();
        }
    }
    public class Category
    {
        public static List<Category> categories { get; set; }

        public Boolean  BestOfferEnabled { get; set; }        
        public Boolean  AutoPayEnabled { get; set; }

        public int CategoryID { get; set; }
        public int CategoryLevel { get; set; }
        public string CategoryName { get; set; }
        public int CategoryParentID { get; set; }

    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44341134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档