【发布时间】:2019-03-29 22:21:07
【问题描述】:
我将以下元素作为 XML 文档的一部分:
<RegisterEntry>
<EntryNumber>3</EntryNumber>
<EntryDate>2009-01-30</EntryDate>
<EntryType>Registered Charges</EntryType>
<EntryText>REGISTERED CHARGE dated 30 December 2008.</EntryText>
</RegisterEntry>
<RegisterEntry>
<EntryNumber>4</EntryNumber>
<EntryType>Registered Charges</EntryType>
<EntryText>REGISTERED CHARGE dated 30 December 2008.</EntryText>
</RegisterEntry>
我正在使用 XmlReader 遍历文档。 RegisterEntry 是一个 XMLNodeType.Element,包含在该元素中的四个是 XmlNodeType.Text。当 XmlReader 在 NodeType.Text 上为 Node.Name 返回一个空字符串时,如何将这些 Text 值中的每一个分配给不同的变量。此外,重复的元素并不总是具有相同数量的文本元素。代码如下:
XmlTextReader reader = new XmlTextReader(fName);
if(reader.NodeType == XmlNodeType.Element && reader.Name =="RegisterEntry")
{
propEntryNo = "";
propEntryDate = "";
propEntryType = "";
propEntryText = "";
while(reader.Read())
{
if(reader.NodeType == XmlNodeType.Text && reader.Name == "EntryNumber" && reader.HasValue)
{
propEntryNo = reader.Value;
}
if (reader.NodeType == XmlNodeType.Text && reader.Name == "EntryDate" && reader.HasValue)
{
propEntryDate = reader.Value;
}
if (reader.NodeType == XmlNodeType.Text && reader.Name == "EntryType" && reader.HasValue)
{
propEntryType = reader.Value;
}
if (reader.NodeType == XmlNodeType.Text && reader.Name == "EntryText" && reader.HasValue)
{
propEntryText += reader.Value + ",";
}
if(reader.NodeType == XmlNodeType.EndElement && reader.Name == "RegisterEntry")
{
add variable values to list
break;
}
}
}
在上面的每个 if 语句中,NodeType 以 Text 形式返回,而 Name 以空字符串形式返回。
【问题讨论】:
-
你能给我们看一些代码吗?
-
表示你想获取
RegisterEntry内的所有子节点,不管它们是否存在? -
您的 XML 显示
RegisterEntry有子元素,那么它们怎么可能是文本节点呢?您的 XML 或您的解释不正确。 显示代码! -
原始帖子已编辑以包含代码。 XML 文件来自英国的土地注册处。
-
@AllenJones 在 99.9% 的情况下,您实际上不需要使用
XmlTextReader。只需将此 XML 文件反序列化为您的对象即可。