簡體   English   中英

根據子元素的存在獲取XML屬性值的列表(LINQ to XML)

[英]Get a list of XML attribute values based off the existence of a child element (LINQ to XML)

抱歉,在初稿中,我沒有意識到我需要標記那些已編碼的部分,因此將它們丟棄了,以至於沒有太大意義。 固定。

這是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>

通常,我需要查看每個<L1Module>是否至少有1個<fee>元素。 我正在循環遍歷<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

希望這更加清楚。 再次感謝。

當您說“ ...至少有1個元素。此示例中有2 ...”時,您不確定該表示什么,因為該示例具有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);

如果我理解正確,那么您正在嘗試確定L1Module元素是否在其fee元素內包含fee元素? 下面的代碼段將為您指明正確的方向。

        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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM