gpt4 book ai didi

c# - 查询从不返回结果 - "Enumeration yielded no results"

转载 作者:太空宇宙 更新时间:2023-11-03 13:51:11 25 4
gpt4 key购买 nike

如何使用来自一个或多个 xml 文件的两条信息填充 case 对象列表?

我尝试过的每一种方法都产生了零结果,并且检查变量给出了“枚举没有结果”。在我下面的代码示例中,我包含(注释掉)了我尝试用来实现此结果的各种方法。

如果已经有答案,请指出那个方向。我也将不胜感激任何随附的解释。

以下是代码片段:

private void gatherInfo(ref List<Case> Cases)
{
List<string> XMLFileNames = new List<string>();

foreach (string caseID in txtbxCases.Lines)
{
Cases.Add(new Case(caseID));
}

XMLFileNames.AddRange(Directory.EnumerateFiles(txtbxXMLDirectory.Text, "*", SearchOption.AllDirectories).Select(Path.GetFileName));

string currentFileName = "";

for (int i = XMLFileNames.Count - 1; i >= 0; i--)
{
currentFileName = XMLFileNames[i];
if (currentFileName.Substring(currentFileName.Length - 4, 4) != ".xml")
{
XMLFileNames.RemoveAt(i);
}
}

// Start of Area that doesn't work correctly
for (int i = XMLFileNames.Count - 1; i>=0; i--)
{
currentFileName = XMLFileNames[i];
//XElement currentDoc = XElement.Load(txtbxXMLDirectory.Text + "\\" + currentFileName);
XDocument currentDoc = XDocument.Load(txtbxXMLDirectory.Text + "\\" + currentFileName);
XElement currentDocElements = XElement.Parse(currentDoc.ToString());

for (int i2 = Cases.Count - 1; i2>=0; i2--)
{
string currentCaseID = Cases[i].GetCaseID();

IEnumerable<XElement> currentCase =
from el in currentDocElements.Descendants("Document");
where (string)el.Element("CaseNumber") == currentCaseID
select el;
///////////////////////////////////////////////////////////
//var currentCase =
// from el in currentDocElements.Descendants("IndexFields")
// where (string)el.Element("CaseNumber") == currentCaseID
// select el;
///////////////////////////////////////////////////////////
//var currentCase = currentDocElements.Descendants("IndexFields")
// .where(x => x.Element("IndexField").Value == currentCaseID);
///////////////////////////////////////////////////////////

foreach (XElement el in currentCase)
{
Cases[i].AddFile(el.Element("SRCFilename").Value, el.Element("XMLFilename").Value);
}
}
}

//foreach (string filename in XMLFileNames)
//{
// XElement currentDoc = XElement.Load(txtbxXMLDirectory.Text + "\\" + filename);
//
// foreach (var caseID in Cases)
// {
// IEnumerable<XElement> currentCase =
// from el in currentDoc.ElementsAfterSelf("IndexFields")//.Elements("IndexFields")
// //where (string)el.Element("CaseNumber") == caseID.GetCaseID()
// select el;
//
// foreach (XElement el in currentCase)
// {
// caseID.AddFile(el.Element("SRCFilename").Value, el.Element("XMLFilename").Value);
// }
// }
//}
}

下面是一个 XML 文件示例,其中包含生产 XML 文件所具有的所有嵌套。

 <ImportSession>
<Batches>
<Batch BatchClassName="CaseFolder_XML">
<Documents>
<Document FormTypeName="Doc XML Form Type">
<IndexFields>
<IndexField Name="CaseNumber" Value="1"/>
<IndexField Name="XMLFilename" Value="aaa.xml"/>
<IndexField Name="SRCFilename" Value="aaa.pdf"/>
</IndexFields>
<Pages>
<Page ImportFileName="c:\aaa.pdf"/>
</Pages>
</Document>
<Document FormTypeName="Doc XML Form Type">
<IndexFields>
<IndexField Name="CaseNumber" Value="2"/>
<IndexField Name="XMLFilename" Value="aaa.xml"/>
<IndexField Name="SRCFilename" Value="aab.pdf"/>
</IndexFields>
<Pages>
<Page ImportFileName="c:\aab.pdf"/>
</Pages>
</Document>
<Document FormTypeName="Doc XML Form Type">
<IndexFields>
<IndexField Name="CaseNumber" Value="3"/>
<IndexField Name="XMLFilename" Value="aaa.xml"/>
<IndexField Name="SRCFilename" Value="aac.pdf"/>
</IndexFields>
<Pages>
<Page ImportFileName="c:\aac.pdf"/>
</Pages>
</Document>
<Document FormTypeName="Doc XML Form Type">
<IndexFields>
<IndexField Name="CaseNumber" Value="4"/>
<IndexField Name="XMLFilename" Value="aaa.xml"/>
<IndexField Name="SRCFilename" Value="aad.pdf"/>
</IndexFields>
<Pages>
<Page ImportFileName="c:\aad.pdf"/>
</Pages>
</Document>
<Document FormTypeName="Doc XML Form Type">
<IndexFields>
<IndexField Name="CaseNumber" Value="1"/>
<IndexField Name="XMLFilename" Value="aaa.xml"/>
<IndexField Name="SRCFilename" Value="aae.pdf"/>
</IndexFields>
<Pages>
<Page ImportFileName="c:\aae.pdf"/>
</Pages>
</Document>
<Document FormTypeName="Doc XML Form Type">
<IndexFields>
<IndexField Name="CaseNumber" Value="1"/>
<IndexField Name="XMLFilename" Value="aaf.xml"/>
<IndexField Name="SRCFilename" Value="aab.pdf"/>
</IndexFields>
<Pages>
<Page ImportFileName="c:\aaf.pdf"/>
</Pages>
</Document>
</Documents>
</Batch>
</Batches>
</ImportSession>

以下在生产中是正确的:

  • 要检查的多个 xml 文件
  • 一个案例可能会在一个 xml 文件中出现多次
  • 相同的文件可以添加到多个案例

最佳答案

也许您应该阅读 Cases[i2] 而不是 Cases[i]

for (int i2 = Cases.Count - 1; i2>=0; i2--)
{ // ^ counter for iterating over "Cases"

string currentCaseID = Cases[i2].GetCaseID();
// ^ use correct counter here

IEnumerable<XElement> currentCase =
from el in currentDocElements.Descendants("Document");
where (string)el.Element("CaseNumber") == currentCaseID
select el;

foreach (XElement el in currentCase)
{
Cases[i2].AddFile(el.Element("SRCFilename").Value, el.Element("XMLFilename").Value);
// ^ and here
}

关于c# - 查询从不返回结果 - "Enumeration yielded no results",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13649307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com