Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.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# 使用循环在XDocument内动态创建元素_C#_Html_Foreach_Linq To Xml_Xelement - Fatal编程技术网

C# 使用循环在XDocument内动态创建元素

C# 使用循环在XDocument内动态创建元素,c#,html,foreach,linq-to-xml,xelement,C#,Html,Foreach,Linq To Xml,Xelement,我需要能够使用循环并根据目录中找到的文件数量,在XDocument中动态创建“n”个元素 我的WIP裸体项目代码可能稍长,无法粘贴到此处,因此我已将其添加到pastie.org- 您将看到,在第73-91行之间,我有一个foreach循环,它搜索一个目录&它的子目录,并定位其中包含的所有文件的路径。 我知道这是我自己用过的: intx=filepath.Length x的输出与给定目录中的文件数匹配 代码的主要部分也可以按照我的要求工作并创建一个HTML文件,但我还需要它在第215行之间动态创建

我需要能够使用循环并根据目录中找到的文件数量,在XDocument中动态创建“n”个元素

我的WIP裸体项目代码可能稍长,无法粘贴到此处,因此我已将其添加到pastie.org-

您将看到,在第73-91行之间,我有一个foreach循环,它搜索一个目录&它的子目录,并定位其中包含的所有文件的路径。 我知道这是我自己用过的:

intx=filepath.Length

x的输出与给定目录中的文件数匹配

代码的主要部分也可以按照我的要求工作并创建一个HTML文件,但我还需要它在第215行之间动态创建“n”个元素,我将:

///****需要在此处插入循环,以根据目录中的文件数动态创建元素数****

就在打开标记之前&第280行,就在关闭标记之后,这样在指定目录中找到的每个文件都将有自己的行

我已经记不清有多少种方法试图通过在整个代码中移动循环来实现这一点,但却不断遇到大量错误

起初,我认为将循环放在代码的第215行非常简单,但这样做会导致许多错误,例如丢失:

; } 等等

现在我完全被卡住了

我试图在C中模拟我不久前制作的一个批处理文件,该文件使用WMIC,工作非常好,但有局限性&我希望再添加一些特性,这就是C的用武之地

批处理文件使用循环,就像我在这里尝试的那样,没有任何问题

以下是WMIC批处理文件中的循环:

(FOR /f "delims=" %%a IN ('dir /b /a-d /s /n "C:\Users\1CM69\Pics & Vids\Archives\Family\2002"') DO (
FOR /f "tokens=1-3*" %%x IN ('dir /a-d /tc "%%~a"^|findstr "^[0-9]"') DO (
  for /f %%c in ("%%~ta") do (
ECHO ^<TR^>^<td style="border-width: 1px;padding: 10px;border-style: inset;border-color: gray;background-color: white;" align="center" valign="middle"^>^<a href="%%a" target="_new"^>^<img src="%%a" width="100px" border="0"^>^</a^>^</TD^>^<td style="border-width: 1px;padding: 10px;border-style: inset;border-color: gray;background-color: white;" align="left" valign="middle"^>^<B^>%%~nxa^</B^>^</TD^>^<td style="border-width: 1px;padding: 10px;border-style: inset;border-color: gray;background-color: white;" align="center" valign="middle"^>^<B^>%%~c^</B^>^</TD^>^<td style="border-width: 1px;padding: 10px;border-style: inset;border-color: gray;background-color: white;" align="center" valign="middle"^>^<B^>%%x^</B^>^</TD^>^</TR^> >> 2002.html))))
我发现will在四处搜索&最初是有希望的,尽管我确实让它根据文件数量动态创建了“n”个元素,但变量DateTake只显示了目录中最后一个文件的值,因此我使用了一个68行的测试目录,它们都包含从循环找到的最终文件中检索到的值

任何帮助都将不胜感激


关于..,

不要使用循环,使用LINQ from。。选择表达,表达

from file in filePaths
select new XElement("tr", 
  new XElement("td",
    new XElement("a", new XAttribute("href", file), new XAttribute("target", "_new"), new XElement("img", new XAttribute("src", file), new XAttribute("width", "100"))),
    new XElement("td", file),
    new XElement("td", GetDate(file))
  ))
要提取日期,请编写一个封装代码的方法,例如

string GetDate(string path) {

try
                                        {

                                        Bitmap MyPhoto = new Bitmap(file);
                                        const int IDDateTimeOriginal = 36867;
                                        PropertyItem TakenDate = MyPhoto.GetPropertyItem(IDDateTimeOriginal);
                                        Encoding ascii = Encoding.ASCII;
                                        return ascii.GetString(TakenDate.Value, 0, TakenDate.Len - 1);
                                        }


                                        catch //(ArgumentException) if the property doesn't exists
                                        {
                                          return "MISSING ENTRY";
                                        }
}

如果您使用的是XElements,它们设计用于Linq,请尝试以下方式:

var filePaths = GetFiles(@"C:\SomeDir");
var xml = new XElement("tr", 
    filePaths.Select(fp => new XElement("td", fp.FullName)));

您好,谢谢您的回复,但我不知道我需要在代码中的什么位置插入此内容。当将其放置在我想要新内容的位置附近时,我会收到许多以var开头的错误,这些错误在本上下文中不可用&这是在请求after&;到处都是,但似乎从来都不开心。对不起,刚开始堆栈溢出,回复时忘记添加注释者名称,所以:@mant101I查看了您的代码,但您确实需要将所有XML创建分解为子函数以使其可读。我猜应该放上新的XElementtr,filepath;如果您有///****需要在此处插入循环,以根据目录****中的文件数动态创建元素数。如果td需要属性或任何东西,您可能需要更改Select的主体以执行您需要的任何操作。您好,最初这似乎是一个简单的逻辑答案,并且做了一些工作。它根据文件数创建了正确的行数,但同样,只有目录中最后一个文件的值填充了表中的每一行。我在这里有点不知所措…您能给我们展示一下您想要在filePaths变量中为示例文件路径创建的示例表行的HTML吗?恐怕WMIC示例不是我所理解的。链接到输出的缩短版本。我添加了标题部分以增加清晰度。我知道我的代码还没有处理的缩略图列或文件名列的填充,但从FilePath变量检索数据应该是轻而易举的解决这个问题后。您可以看到,DATE Take列中填充了来自特定图像EXIF数据的DateTimeOriginal字段,这应该通过迭代为目录中的所有图像完成。这是一个批处理文件,它正是我在C中试图实现的。这可能会有所帮助。很抱歉,新的堆栈溢出,在回复时忘记添加注释者名称,所以:@martin