当子节点是同名时,如何从XML序列化到C#.net

问题描述 投票:0回答:2

这是文件结构:

<BODY>
    <IMPORTDATA>
            <REQUESTDATA>
                <TALLYMESSAGE xmlns:UDF="TallyUDF">
                    <VOUCHER REMOTEID="abcd1" VCHKEY="0000a582:000000e0" VCHTYPE="Payment" ACTION="Create" OBJVIEW="Accounting Voucher View">
                        <ALLLEDGERENTRIES.LIST>
                            <LEDGERNAME>Bank Charges</LEDGERNAME>
                            <AMOUNT>-575.00</AMOUNT>
                        </ALLLEDGERENTRIES.LIST>
                        <ALLLEDGERENTRIES.LIST>
                            <LEDGERNAME>Standard Chartered Bank Ltd-01-5547520-01</LEDGERNAME>
                            <AMOUNT>575.00</AMOUNT>
                        </ALLLEDGERENTRIES.LIST>
                    </VOUCHER>
                </TALLYMESSAGE>
            </REQUESTDATA>
        </IMPORTDATA>
    </BODY>

这里有两个ALLLEDGERENTRIES.LIST。我如何找到这两个LEDGERNAMEALLLEDGERENTRIES.LIST的值?我用这种方式检测节点

XmlNodeList dataNodes = xmlDoc.SelectNodes("/ENVELOPE/BODY/IMPORTDATA/REQUESTDATA/TALLYMESSAGE/VOUCHER")
c# xml
2个回答
2
投票

您可以使用更加友好的API来处理xml - qazxsw poi

LINQ to XML

var doc = XDocument.Load(PathToXmlFile); var ledgerNames = doc.Root .Descendants("ALLLEDGERENTRIES.LIST") .Elements("LEDGERNAME") .Select(element => element.Value); foreach (var name in ledgerNames) { Console.WriteLine(name); } 将返回任何级别上xml文件中存在的给定名称的所有xml元素。 Descendants

所以基本上你可以使用From MSDN直接用于Descendants元素并省略LEDGERNAME

Root

0
投票

复制XML(标记all并单击ctrl + c)。在视觉工作室去

编辑>选择性粘贴>将XML粘贴为类

这将创建XML结构作为C#类。 var ledgerNames = doc.Descendants("LEDGERNAME") .Select(element => element.Value); 将作为阵列呈现。

© www.soinside.com 2019 - 2024. All rights reserved.