在xml中访问列表
本文关键字:列表 访问 xml | 更新日期: 2023-09-27 17:51:10
XML数据结构:
<CPT xmlns="http://www.example.org/genericClientProfile" xmlns:ns2="http://www.bosch-si.com/finance/cts/cpt/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/genericClientProfile genericClientProfile.xsd">
<header>
<serviceId>CPT-UK</serviceId>
<versionId>1.0</versionId>
<brandCode>RBS.ADA</brandCode>
<creationTime>2013-09-24T16:56:52.985+02:00</creationTime>
</header>
<clientProfile bpKey="19933" id="1bb26568-1df3-4206-8cea-fb4614bf0a6a" createdBy="BARBOURT" lastModifiedBy="MANNC" documentStructureVersion="V3_2" lastModifiedAt="2013-09-23 15:40:49.873" createdAt="2013-09-23 10:07:33.608">
<section xmlns="" id="cd21fbb5-da1b-485d-8909-a8392fd5ad5c" name="globalClientFacts">
<attribute name="familyAndDependentComment" type="string">Tomas is 18 in 2013</attribute>
<list name="familyAndDependents">
<entry entryId="1">
<attribute name="famDependAge" type="decimal">0</attribute>
<attribute name="famDependBirthdate" type="date" />
<attribute name="famDependFinDep" type="boolean">false</attribute>
<attribute name="famDependFinDepUntil" type="string" />
<attribute name="famDependName" type="string">Tomas</attribute>
<attribute name="famDependNat" type="xmlCountry">GB</attribute>
<attribute name="famDependRel" type="enumeration">SON</attribute>
<attribute name="famDependRelTo" type="string" />
</entry>
<entry entryId="2"></list>
<attribute name="subCommentWills" type="string" />
</section>
我有以下数据结构,我要做的是创建SQL插入语句从每个"节",我已经设法做到。然而,如果一个部分包含一个列表,我需要得到列表名称,然后只有一个条目的属性。目前它似乎加倍的属性,因为有两个条目。
c#: public void findAllNodes(XDocument doc, XNamespace ns)
{
StringBuilder attribute = new StringBuilder();
StringBuilder values = new StringBuilder();
values.Append("(");
var db = cptsqlentity();
foreach (var f in doc.Descendants(ns + "clientProfile").First().Elements())
{
if (f.Attribute("name") != null)
{
values.Append(")");
attribute.Append(")");
attribute.Append(values);
values.Clear();
attribute.Append(Environment.NewLine);
attribute.Append("INSERT INTO ");
values.Append(" VALUES (");
OracleCommand oracleq = new OracleCommand("SELECT TABLE_SHORT FROM LOOKUP WHERE TABLE_LONG = " + "'" + f.Attribute("name").Value + "'" + " AND ROWNUM <=1", db);
OracleDataReader dr = oracleq.ExecuteReader();
dr.Read();
attribute.Append(dr.GetString(0));
attribute.Append(" (");
}
foreach (var p in f.Descendants())
{
if (p.Attribute("name") != null) {
attribute.Append(p.Attribute("name").Value + ",");
values.Append("'" + p.Value + "'" + ",");
}
}
}
我不是100%确定XML文件的模式,但是下面的操作不可以吗?
将最后一条foreach
语句替换为以下语句:
foreach (var p in f.Elements("attribute")
.Union(f.Elements("list")
.SelectMany(l => l.Elements()
.First()
.Elements("attribute"))))
{
//...
}
这将为您提供section
元素的所有attribute
子元素以及所有list
元素的第一个子元素的所有attribute
子元素(这是您的section
的子元素)。
明白了吗?