您好,我希望有人可以帮助我,我一直在试图在XML文件中获取特定文本,但到目前为止还没有成功。我已经研究了很多,到目前为止,互联网上找不到的任何项目都没有用。
我正在尝试读取由第三方应用程序生成的导出XML文件。现在我开始怀疑XML是否是根据正确的XML规则设置的?我有以下XML:
<?xml version="1.0" encoding="utf-8"?>
<Document>
<DocumentInfo>
<Created>2016-05-23T13:19:41.0528572Z</Created>
<ExportSetting>None</ExportSetting>
<InstalledProducts>
<Product>
<DisplayName>Some display name</DisplayName>
<DisplayVersion>Some display version</DisplayVersion>
</Product>
<OptionPackage>
<DisplayName>Some display name</DisplayName>
<DisplayVersion>Some display version</DisplayVersion>
</OptionPackage>
<Product>
<DisplayName>Some display name</DisplayName>
<DisplayVersion>Some display version</DisplayVersion>
</Product>
<OptionPackage>
<DisplayName>Some display name</DisplayName>
<DisplayVersion>Some display version</DisplayVersion>
</OptionPackage>
<Product>
<DisplayName>Some display name</DisplayName>
<DisplayVersion>Some display version</DisplayVersion>
</Product>
</InstalledProducts>
</DocumentInfo>
<Some.Block ID="0">
<AttributeList>
<Interface>
<Sections xmlns="http://www.somenamespace.com">
<Section Name="Input">
<Member Name="Member name 1" Datatype="Bool" />
<Member Name="Member name 2" Datatype="Int" />
<Member Name="Member name 3" Datatype="Int" />
</Section>
获取显示名称元素等没有问题,因为这似乎是正常的xml代码,但第二部分相当困难。
我想仅提取属性名称为“Input”的Section的成员属性'Name和'Datatype'的值。
我用XMLPath,getNodebytagname等尝试了很多东西等等。
试过这个:
xmlnode = doc.GetElementsByTagName("Sections");
for (i = 0; i <= xmlnode.Count - 1; i++)
{
xmlnode[i].ChildNodes.Item(0).InnerText.Trim();
str = xmlnode[i].ChildNodes.Item(0).InnerText.Trim() + " " + xmlnode[i].ChildNodes.Item(1).InnerText.Trim() + " " + xmlnode[i].ChildNodes.Item(2).InnerText.Trim();
MessageBox.Show(str);
}
并尝试了这个:
//XmlNodeList elemList = doc.GetElementsByTagName("Section[@Name='Input']");
//for (int x = 0; x < elemList.Count; x++)
//{
// string attrVal = elemList[x].Attributes["Interface"].Value;
//}
到目前为止,没有任何工作,代码似乎无法超越名称空间的部分。有没有人有想法?
答案 0 :(得分:2)
这样做:
XmlNodeList nodes = doc.GetElementsByTagName("Section");
Dictionary<string, string> list = new Dictionary<string, string>();
foreach (XmlNode node in nodes)
{
if (node.Attributes != null && node.Attributes["Name"] != null && node.Attributes["Name"].Value == "Input")
{
foreach (XmlNode childNode in node.ChildNodes)
{
if (childNode.Attributes != null)
list.Add(childNode.Attributes["Name"].Value, childNode.Attributes["Datatype"].Value);
}
}
}
您将拥有格式<Name, Datatype>