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

标签 c# xml

我将以下元素作为 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/

相关文章:

c# - WP8.1 中的手势识别 block 文本框

c# - 将自定义 UserControl 添加到 Visual Studio 2005 的工具箱

php xpath问题

xml - Netbeans:为 XML 生成 DTD

c# - 如何测试 XML 元素内部是否有文本元素?

java - 不使用注释 @HandleChain 实现 SOAPHandler

java - 扩展自定义布局类 - 从未使用过构造函数

c# - 将 c 字符数组 [128] 编码到 c#

c# - 如何在 VS2010 中创建 .NET2 兼容的应用程序?

c# - 从反射抛出的 TargetInvocationException 是否可以有 null InnerException