这是文件结构:
<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
。我如何找到这两个LEDGERNAME
的ALLLEDGERENTRIES.LIST
的值?我用这种方式检测节点
XmlNodeList dataNodes = xmlDoc.SelectNodes("/ENVELOPE/BODY/IMPORTDATA/REQUESTDATA/TALLYMESSAGE/VOUCHER")
您可以使用更加友好的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
复制XML(标记all并单击ctrl + c)。在视觉工作室去
编辑>选择性粘贴>将XML粘贴为类
这将创建XML结构作为C#类。 var ledgerNames = doc.Descendants("LEDGERNAME")
.Select(element => element.Value);
将作为阵列呈现。