C# 如何将子节点存储到子节点并删除直接的父节点?
我们正在解析一个xml,在序列化它们之后,它将被存储在数据库中 我们的XML如下所示C# 如何将子节点存储到子节点并删除直接的父节点?,c#,.net,xml,C#,.net,Xml,我们正在解析一个xml,在序列化它们之后,它将被存储在数据库中 我们的XML如下所示 <SampleTypeService> <Name>sample1</Name> <URL>sample1</URL> <SampleTypeService_PK_ID>225d0266-e83a-44b8-88fc-700f6570d530</SampleTypeService_PK_ID> &
<SampleTypeService>
<Name>sample1</Name>
<URL>sample1</URL>
<SampleTypeService_PK_ID>225d0266-e83a-44b8-88fc-700f6570d530</SampleTypeService_PK_ID>
<SampleTypes>
<SampleType_PK_ID>ef1d8c40-72ce-48d8-b252-9b521e96fa74</SampleType_PK_ID>
</SampleTypes>
</SampleTypeService>
<SampleTypeService>
<Name>sample2</Name>
<URL>sample2</URL>
<SampleTypeService_PK_ID>225reg66-e83a-44b8-88fc-700f6570d530</SampleTypeService_PK_ID>
<SampleTypes>
<SampleType_PK_ID>gh4d8c40-72ce-48d8-b252-9b521e96fa74</SampleType_PK_ID>
</SampleTypes>
</SampleTypeService>
foreach (XmlNode SampleNode in SampleList)
{
XmlNodeList ChildList = SampleNode.ChildNodes;
for (int j = 0; j < ChildList.Count; j++)
{
if (ChildList[j].LocalName == "SampleType_PK_ID>")
{
strSampleTypePKID = ChildList[j].InnerText;
if (strSampleTypePKID != null)
{
SampleNode.ParentNode.RemoveChild(ChildList[j]);
j--;
}
}
}
testString = SampleNode.OuterXml;
Console.WriteLine("1):" + strSampleTypePKID);
//Code to serialize and store in database is here.
}
但是
strSampleTypePKID
将作为空字符串返回。我错过了什么。如何获取子节点到子节点的值,然后将其与其直接父节点一起删除?您正在错误级别查找内部子节点“SampleType\u PK\u ID”。
如果在strSampleTypePKID=ChildList[j]行放置断点代码>,您可以看到它从未被执行过
请尝试以下操作:
foreach (XmlNode SampleNode in doc.FirstChild.ChildNodes)
{
strSampleTypePKID = string.Empty;
var sampleTypesNode = SampleNode.ChildNodes.OfType<XmlElement>().Where(x => x.Name == "SampleTypes").FirstOrDefault();
if (sampleTypesNode != null)
{
var pkNode = sampleTypesNode.ChildNodes.OfType<XmlElement>().Where(x => x.Name == "SampleType_PK_ID").FirstOrDefault();
if (pkNode != null)
{
strSampleTypePKID = pkNode.InnerText;
SampleNode.RemoveChild(sampleTypesNode);
}
}
testString = SampleNode.OuterXml;
Console.WriteLine("1):" + strSampleTypePKID);
//Code to serialize and store in database is here.
}
foreach(doc.FirstChild.ChildNodes中的XmlNode SampleNode)
{
strSampleTypePKID=string.Empty;
var sampleTypesNode=SampleNode.ChildNodes.OfType()。其中(x=>x.Name==“SampleTypes”).FirstOrDefault();
if(sampleTypesNode!=null)
{
var pkNode=sampleTypesNode.ChildNodes.OfType()。其中(x=>x.Name==“SampleType\u PK\u ID”).FirstOrDefault();
if(pkNode!=null)
{
strSampleTypePKID=pkNode.InnerText;
SampleNode.RemoveChild(sampleTypesNode);
}
}
testString=SampleNode.OuterXml;
Console.WriteLine(“1):“+strSampleTypePKID);
//要序列化并存储在数据库中的代码在这里。
}
感谢您提供更简洁的答案版本。看起来比有多个循环更好。