gpt4 book ai didi

c# - 具有多个不同文本元素的 XML 元素

转载 作者:数据小太阳 更新时间:2023-10-29 02:38:27 26 4
gpt4 key购买 nike

我将以下元素作为 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 返回一个空字符串时,我如何将这些文本值中的每一个分配给不同的变量。此外,重复的元素并不总是具有相同数量的文本元素。代码如下:

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 作为空字符串返回。

最佳答案

XML 元素和里面的文本是不同节点!

您必须先阅读 XML 元素的内容。 简单示例:

switch (reader.Name)
{
// found a node with name = "EntryNumber" (type = Element)
case "EntryNumber":
// make sure it's not the closing tag
if (reader.IsStartElement())
{
// read the text inside the element, which is a seperate node (type = Text)
reader.Read();
// get the value of the text node
propEntryNo = reader.Value;
}
break;
// ...
}

另一个选项是 ReadElementContentAsString

switch (reader.Name)
{
case "EntryNumber":
propEntryNo = reader.ReadElementContentAsString();
break;
// ...
}

当然,这些简单示例假定 XML 为预期格式。您应该在代码中包含适当的检查。

至于其他建议的解决方案:

关于c# - 具有多个不同文本元素的 XML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52986992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com