在初稿上道歉,我没有意识到我需要标记代码的部分,因此它们被淘汰,留下它没有多大意义。固定的。
这是XML的一个片段,它使用所有属性来指示值。在主XML中,有许多 <L1Module>
元素,我刚刚在这里复制了1。其中一些元素会有<fee>
元素,有些元素甚至不会以<fee/>
形式存在。
<L1Module moduleCode="CFINCEX-101" moduleTypeCode="OPTIONAL" moduleInstanceID="CFINCEX-101_906376" moduleTypeDescription="Optional" credits="0" quota="999" placesLeft="985">
<fees>
<fee feesCategory="STANDARD" feesDescription="Standard Category for Fees" feesAmount="10"/>
<fee feesCategory="STANDARD" feesDescription="Standard Category for Fees" feesAmount="86"/>
</fees>
<documents/>
<roles/>
<L2Modules/>
</L1Module>
主要是我需要查看每个<fee>
中是否存在至少1个<L1Module>
元素。我正在<L1Module>
那里骑车..
var elements = course_structureXML.Descendants("L1Module").Where(i => i.Value == "");
foreach (var element in elements)
{
check to see if there's a fee element
if there is do something
else do nothing
}
我只是很难看到是否有费用元素。我是否应该像这样循环L1Module
?
希望更清楚一点。再次感谢。
答案 0 :(得分:0)
当你说&#34; ...至少有一个元素时,不确定你是什么意思。这个例子有2 ...&#34;因为该示例包含2个以上的元素。这应该足以让你继续前进:
string xml = @"<L1Module moduleCode=""CFINCEX-101""
moduleTypeCode=""OPTIONAL""
moduleInstanceID=""CFINCEX-101_906376""
moduleTypeDescription=""Optional""
credits=""0""
quota=""999""
placesLeft=""985"">
<fees>
<fee feesCategory=""STANDARD""
feesDescription=""Standard Category for Fees""
feesAmount=""10""/>
<fee feesCategory=""STANDARD""
feesDescription=""Standard Category for Fees""
feesAmount=""86""/>
</fees>
<documents/>
<roles/>
<L2Modules/>
</L1Module>";
var document = XDocument.Parse(xml);
var l1Modules = document.Elements("L1Module")
.Where(el => el.HasElements);
foreach (var l1module in l1Modules)
Console.WriteLine(l1module.Attribute("moduleCode").Value);
答案 1 :(得分:0)
如果我理解正确,你是想弄清楚L1Module元素是否在其费用元素中包含费用元素?下面的代码段应该指向正确的方向。
String xmlWithFees = "<L1Module moduleCode=\"CFINCEX-101\" moduleTypeCode=\"OPTIONAL\" moduleInstanceID=\"CFINCEX-101_906376\" moduleTypeDescription=\"Optional\" credits=\"0\" quota=\"999\" placesLeft=\"985\">\n" +
"<fees>\n" +
"<fee feesCategory=\"STANDARD\" feesDescription=\"Standard Category for Fees\" feesAmount=\"10\"/>\n" +
"<fee feesCategory=\"STANDARD\" feesDescription=\"Standard Category for Fees\" feesAmount=\"86\"/>\n" +
"</fees>\n" +
"<documents/>\n" +
"<roles/>\n" +
"<L2Modules/>\n" +
"</L1Module>";
String xmlWithoutFees = "<L1Module moduleCode=\"CFINCEX-101\" moduleTypeCode=\"OPTIONAL\" moduleInstanceID=\"CFINCEX-101_906376\" moduleTypeDescription=\"Optional\" credits=\"0\" quota=\"999\" placesLeft=\"985\">\n" +
"<fees/>\n" +
"<documents/>\n" +
"<roles/>\n" +
"<L2Modules/>\n" +
"</L1Module>";
XDocument document = XDocument.Parse(xmlWithFees);
var l1module = document.Elements("L1Module").Where(el => el.HasElements);
var fees = l1module.Elements("fees");
bool hasFees = fees.Elements("fee").Any();
// Will print true
Console.WriteLine("Has fees? " + hasFees);
document = XDocument.Parse(xmlWithoutFees);
l1module = document.Elements("L1Module").Where(el => el.HasElements);
fees = l1module.Elements("fees");
hasFees = fees.Elements("fee").Any();
// Will print false
Console.WriteLine("Has fees? " + hasFees);