第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何檢查不同 XML 文件中包含的 XML 節(jié)點(diǎn)是否相等?

如何檢查不同 XML 文件中包含的 XML 節(jié)點(diǎn)是否相等?

C#
茅侃侃 2022-01-16 15:04:06
我有兩個使用該System.Xml.XmlDocument.LoadXml(fileName)方法讀取的 XML 文件(文件 A 和文件 B,其中文件 A 是文件 B 的子集)。然后,我使用System.Xml.XmlNode.SelectNodes(nodeName)我需要比較文件 A 中的每個選定 xml 節(jié)點(diǎn)是否相等或文件 B 中同一節(jié)點(diǎn)的子集來選擇這些文件中的節(jié)點(diǎn)。還需要檢查任何節(jié)點(diǎn)中包含的子節(jié)點(diǎn)的順序文件 A 中的子節(jié)點(diǎn)的順序與文件 B 中該節(jié)點(diǎn)中包含的相同子節(jié)點(diǎn)的順序相同。例如,文件A<rootNodeA> <elementA>  <subelementA>content</subElementA>  <subelementB>content</subElementB>  <subelementB>content</subElementC>  <subelementB>content</subElementD> </elementA> <elementB>  <subelementA>content</subElementA>  <subelementB>content</subElementB> </elementB></rootNodeA>文件B<rootNodeB> <elementA>  <subelementB>content</subElementB>  <subelementD>content</subElementD> </elementA> <elementB>  <subelementA>content</subElementA> </elementB></rootNodeB>如您所見,fileB 是 fileA 的子集。我需要檢查elementA文件 B 的節(jié)點(diǎn)是否相等或文件 A 中同一節(jié)點(diǎn)的子集。對于子節(jié)點(diǎn)(等)和節(jié)點(diǎn)/子節(jié)點(diǎn)的內(nèi)容也elementA應(yīng)該如此。subElementA此外,如果您elementA在 fileA 中看到,則按 A、B、C、D 的順序有 4 個子元素。對于elementAfileB 中的相同內(nèi)容,按 A、D 的順序有 2 個子元素。該順序即A在D之前與文件A中的順序相同,也需要檢查這一點(diǎn)。我的想法是計算節(jié)點(diǎn)的哈希值,然后比較它們,但不確定如何或是否能滿足目的。編輯:我到目前為止的代碼,    HashSet<XmlElement> hashA = new HashSet<XmlElement>();    HashSet<XmlElement> hashB = new HashSet<XmlElement>();                foreach (XmlElement node in nodeList)                {                    hashA.Add(node);                }                foreach(XmlElement node in masterNodeList)                {                    hashB.Add(node);                }                isSubset = new HashSet<XmlElement>(hashA).IsSubsetOf(hashB);            return isSubset;
查看完整描述

1 回答

?
炎炎設(shè)計

TA貢獻(xiàn)1808條經(jīng)驗 獲得超4個贊

這聽起來像是一個簡單的遞歸函數(shù)。


沒有檢查它是否真的有效,但應(yīng)該這樣做:


public static bool isSubset(XmlElement source, XmlElement target)

    {

        if (!target.HasChildNodes)

        {

            if (source.HasChildNodes) // surly not same.

                return false;

            return string.Equals(source.Value, target.Value); // equalize values.

        }


        var sourceChildren = source.ChildNodes.OfType<XmlElement>().ToArray(); // list all child tags in source (by order)

        var currentSearchIndex = 0; // where are we searching from (where have we found our match)


        foreach (var targetChild in target.ChildNodes.OfType<XmlElement>())

        {

            var findIndex = Array.FindIndex(sourceChildren, currentSearchIndex, el => el.Name == targetChild.Name);

            if (findIndex == -1)

                return false; // not found in source, therefore not a subset.


            if (!isSubset(sourceChildren[findIndex], targetChild))

                return false; // if the child is not a subset, then parent isn't too.


            currentSearchIndex = findIndex; // increment our search index so we won't match nodes that already passed.

        }

    }


查看完整回答
反對 回復(fù) 2022-01-16
  • 1 回答
  • 0 關(guān)注
  • 229 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號