【问题标题】:How to bind XAttribute Value by Foreach如何通过 Foreach 绑定 XAttribute 值
【发布时间】:2012-07-25 15:27:27
【问题描述】:
var xEle = new XElement("ContentDetails",
            from emp in _lstContents
            select new XElement("Contents",
                        new XAttribute("key", emp.Key),
                        new XAttribute("PublishedDate", emp.PublishedDate),
                        new XAttribute("FilePathURL", emp.FilePathURL),
                        new XAttribute("ID", emp.TitleID),
                        new XAttribute("ContentName", emp.Name)
                        ));

_lstContents 包含整个记录。我需要通过 LinQ 操作来构建 XmlDocument 我知道这是可以实现的,我做到了。 这是我所做的示例 XML:

<ContentDetails>
  <Contents ContentName="Sample Project Plan SOW" ID="3"
        FilePathURL="http://192.168.30.59/contentraven/Uploads/Custom_View_LLC/EncryptedFile/zsg34g45tfblrkvzjh0cdlvs_17_7_2012_19_24_3.doc"
        PublishedDate="2012-07-10T14:37:02.073" key="310-072012-A5CDE"/>
</ContentDetails>

但现在我需要的是

<ContentDetails>
  <Contents ContentName="Sample Project Plan SOW" ID="3"
        FilePathURL="http://192.168.30.59/contentraven/Uploads/Custom_View_LLC/EncryptedFile/zsg34g45tfblrkvzjh0cdlvs_17_7_2012_19_24_3.doc"
        PublishedDate="2012-07-10T14:37:02.073" key="310-072012-A5CDE"/>
   <categories>
      <category id="1" categoryname="Category-1" contentid="3"/>
      <category id="2" categoryname="Category-2" contentid="3"/>
      <category id="3" categoryname="Category-3" contentid="3"/>
  </categories>
</ContentDetails>

我正在尝试这样的事情

var xEle = new XElement("ContentDetails",
            from emp in _lstContents
            select new XElement("Contents",
                        new XAttribute("key", emp.Key),
                        new XAttribute("PublishedDate", emp.PublishedDate),
                        new XAttribute("FilePathURL", emp.FilePathURL),
                        new XAttribute("ID", emp.TitleID),
                        new XAttribute("ContentName", emp.Name),
                            new XElement("Categories",
                                new XElement("Category",
                                    new XAttribute("ID", emp.Category.ForEach(_P => _P.CategoryID ),
                                    new XAttribute("CategoryName", emp.Category.ForEach(_P => _P.CategoryName))
                                )

                        ));

我怎样才能做到这一点?

emp.Category 是_lstContents List 中的一个Property List;

我需要创建与 emp.Category 中一样多的 CategoryName 属性。

请参阅随附的屏幕截图。 谢谢

【问题讨论】:

    标签: xml linq c#-4.0 linq-to-xml


    【解决方案1】:

    您就快到了,您只需要将类别集合中的项目投影到category 元素。这与您将 _lstContents 中的项目投影到 Contents 元素的方式没有太大区别。

    var contentDetails =
        new XElement("ContentDetails",
            from contents in _lstContents
            select new XElement("Contents",
                new XAttribute("ContentName", contents.Name),
                new XAttribute("ID", contents.TitleID),
                new XAttribute("FilePathURL", contents.FilePathURL),
                new XAttribute("PublishedDate", contents.PublishedDate),
                new XAttribute("key", contents.Key),
                new XElement("categories",
                    from category in contents.Category
                    select new XElement("category",
                        new XAttribute("id", category.CategoryID),
                        new XAttribute("categoryname", category.CategoryName),
                        new XAttribute("contentid", category.ContentID)
                    )
                )
            )
        );
    

    【讨论】:

    • 我收到“值不能为空”@contents.Category 某些内容!我怎么 chk 不为空?
    猜你喜欢
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    相关资源
    最近更新 更多