首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用元素计数向XML添加属性

如何使用元素计数向XML添加属性
EN

Stack Overflow用户
提问于 2010-11-03 23:07:24
回答 1查看 265关注 0票数 0

xml有许多NEWRECORDS,其中包含一些普通元素,后面是带有元素的元素。具有子元素的元素可以出现在从0到无穷大的任何位置,并且需要接收一个名为count的属性,该属性的出现位置在NEWRECORD中。现在我发现你可以对元素id进行计数,你可以使用linq to state从某个层开始计数,但这些元素都不是必需的,大约有15个,这意味着要搜索15次吗?或者,有没有一种简单的方法将计数添加到xml中?

我添加了xml,但为了保持它的可读性,我去掉了很多信息。简而言之,NAME和YEAR是不需要计数的元素,因为它们对于NEWRECORD是唯一的,并且没有子元素(并且是必需的)。其他的需要一个count属性(并且会有子元素),即使只有1个,甚至可能会丢失。

代码语言:javascript
复制
<NEWFILE>
    <NEWRECORD num="343">
        <NAME>Single Scheme</NAME>
        <YEAR>2005</YEAR>
        <SPS></SPS>
        <SPS></SPS>
        <SPS></SPS>
        <SPS></SPS>
        <SPS></SPS>
        <MODULATION_2005></MODULATION_2005>
        <MODULATION_2005></MODULATION_2005>
        <MODULATION_2005></MODULATION_2005>
        <ADDITIONAL></ADDITIONAL>
        <NOTES></NOTES>
        <PART_C2_HISTORY></PART_C2_HISTORY>
        <PART_C2_HISTORY></PART_C2_HISTORY>
        <PART_C2_HISTORY></PART_C2_HISTORY>
        <PART_C2_HISTORY></PART_C2_HISTORY>
        <PART_C2_HISTORY></PART_C2_HISTORY>
        <PART_C2_HISTORY></PART_C2_HISTORY>
        <PART_C2_HISTORY></PART_C2_HISTORY>
    </NEWRECORD>
        <NEWRECORD num="344">
        <NAME>Single Scheme</NAME>
        <YEAR>2005</YEAR>
        <SPS></SPS>
        <SPS></SPS>
        <MODULATION_2005></MODULATION_2005>
        <ADDITIONAL></ADDITIONAL>
        <PART_C2_HISTORY></PART_C2_HISTORY>
        <PART_C2_HISTORY></PART_C2_HISTORY>
        <PART_C2_HISTORY></PART_C2_HISTORY>
    </NEWRECORD>
</NEWFILE>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-05 00:50:59

通过一些尝试和各种LINQ的使用,我提出了一种方法。考虑到我是一个LINQ新手,我几乎没有找到关于我所做的事情的任何信息(我从here得到了一些帮助),我对结果相当满意,并认为它可能对其他人有用。另外,我还可以对此做一些改进吗?

代码语言:javascript
复制
    public XDocument FormatcountPreProcData(XDocument inputDoc)
    {
        if (inputDoc != null)
        {
            var elementsToChange = inputDoc.Elements("NEWFILE").Elements("NEWRECORD").Elements();

            foreach (var element in elementsToChange)
            {
                if (element.Descendants().Any())
                {
                    Int32 count = inputDoc.Elements("NEWFILE").Elements("NEWRECORD").Elements(element.Name.ToString()).Count();
                    element.Add(new XAttribute("count", count));
                }
            }
        }
        return inputDoc;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4088469

复制
相关文章

相似问题

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