【问题标题】:Linq to Xml - Get a valid xml document after remove operationLinq to Xml - 删除操作后获取有效的 xml 文档
【发布时间】:2012-06-24 14:30:01
【问题描述】:

对于像下面这样的 xml 文档,我会显示当前所选文件夹的所有子文件夹和文件。为此,我从 xml 字符串中删除了不匹配的文件夹并在前端使用 XSLT 构建了一个 UI。似乎该操作正在删除使结果字符串无效的 xml 的所有节点。所以

  • 如何在不更改文档有效性的情况下使用 Linq to Xml 从 xml 中删除元素

Xml 文档

<?xml version="1.0" encoding="utf-8"?>
<Folder>
  <Folders>
    <Folder ID="1" Name="Root" ParentId="0">
      <Files></Files>
    </Folder>
    <Folder ID="2" Name="My Documents" ParentId="1">
      <Files>
        <File Name="LicenceCode.txt" Size="2000" CreatedOn="1/1/2012 12:12:00 PM" CreatedBy="1" ModifiedOn="1/10/2012 10:12:56 AM" ModifiedBy="2"></File>
      </Files>
    </Folder>
  </Folders>
</Folder>

代码

XElement filesAndFolders = XElement.Parse(xmlDocumentString);
string outputFolders = string.concat(from folders in filesAndFolders in filesAndFolder.Elements("Folder").Folder("Folders") where folders.Attribute("ParentId").Value.Equals(selectedFolderId) select folders);
//pass outputFolders string to xsl to build the UI

问题

outputFolders 字符串无效,因为它仅包含以下字符串,不是有效文档

<Folder ID="2" Name="My Documents" ParentId="1">
  <Files>
    <File Name="LicenceCode.txt" Size="2000" CreatedOn="1/1/2012 12:12:00 PM" CreatedBy="1" ModifiedOn="1/10/2012 10:12:56 AM" ModifiedBy="2"></File>
  </Files>
</Folder>

【问题讨论】:

  • 我会说文件夹和文件的分层布局与 xml 的分层性质之间存在自然的对称性。是否可以创建一个 xml 文档,其中父/子文件夹成为文档中的父/子节点?我不确定您通过展平文件夹结构添加了什么价值
  • @paul 无法修改 xml,因为它为其他服务提供服务。

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


【解决方案1】:

删除不需要的元素怎么样:

        var doc = XDocument.Parse(xmlString);

        doc.Element("Folder").Element("Folders").Elements("Folder").Where(f => f.Attribute("ID").Value == "1").Remove();

【讨论】:

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