Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在检查base64中编码的XML附件的大小_C#_Xml - Fatal编程技术网

C# 正在检查base64中编码的XML附件的大小

C# 正在检查base64中编码的XML附件的大小,c#,xml,C#,Xml,我正在遍历一个包含许多XML文件的列表,其中每个文件都附带了各种文件,用base64编码。附件模板: <my:Attachments> <my:Attachment-name>base64code</my:Attachment-name> <my:Attachment-name-Description/> <my:Attachment-name2>base64code<

我正在遍历一个包含许多XML文件的列表,其中每个文件都附带了各种文件,用base64编码。附件模板:

        <my:Attachments>
        <my:Attachment-name>base64code</my:Attachment-name>
        <my:Attachment-name-Description/>
        <my:Attachment-name2>base64code</my:Attachment-name2>
        <my:Attachment-Checklist-Description/>
        <my:Additional-Attachments>
            <my:Attachment>base64code</my:Attachment>
            <my:Attachment-Description>description</my:Attachment-Description>
        </my:Additional-Attachments>
        <my:Additional-Attachments>
            <my:Attachment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">base64code</my:Attachment>
            <my:Attachment-Description>description2</my:Attachment-Description>
        </my:Additional-Attachments>
    </my:Attachments>

由于attachments节点中的每个元素都有不同的名称,所以我尝试遍历所有元素,如果其值为base64,则执行其余操作。问题在于,我得到的不是一个包含每行的集合,而是一个由my:Attachments中所有行组成的项目。您可以使用XDocument类和Linq to xml。以下是一个例子:

string xmlData = "yourXmlString";
int maxAttachementSize = 100000;
XDocument xml = XDocument.Parse(xmlData);
XNamespace my_ns = "myNamespaceDefinition";
var attachementsInBase64String = xml.Descendants(my_ns + "Attachment").Select(x => x.Value);
var tooBigAttachements = attachementsInBase64String .Where(att => Convert.FromBase64String(att).Length > maxAttachementSize);
根据您的更新,您可以通过这种方式检查attachements(假设您有一个attachements元素):


有很多关于使用C#online处理XML的教程。System.XML.Linq命名空间中的XDocument类允许使用Linq.object引用轻松管理和操作XML,而不是在foreach上设置对象的实例。我只有1个my:Attachments节点,它看起来像是提供的,并且处于这样一个层次结构中:my:Main节点>my:ProjectData节点,在该节点中有my:Attachments@Wolwgang,已更新。Foreach循环应仅枚举所有叶。
string xmlData = "yourXmlString";
int maxAttachementSize = 100000;
XDocument xml = XDocument.Parse(xmlData);
XNamespace my_ns = "myNamespaceDefinition";
var attachementsInBase64String = xml.Descendants(my_ns + "Attachment").Select(x => x.Value);
var tooBigAttachements = attachementsInBase64String .Where(att => Convert.FromBase64String(att).Length > maxAttachementSize);
foreach (XElement xElem in xDoc.Element("Attachments").Descendants().Where(e => !e.HasElements))
{
      if(!string.IsNullOrWhiteSpace(xElem.Value))
      {
           byte[] attachement = Convert.FromBase64String(xElem.Value);
           // rest of a code
      }
}