gpt4 book ai didi

c# - XMLTextReader 不读取元素内容

转载 作者:太空狗 更新时间:2023-10-29 21:15:03 26 4
gpt4 key购买 nike

static void ReadXml()
{
string a= null;
double b= 0;
double c= 0;
XmlReader xmlReader = new XmlReader("Testxml.xml");
xmlReader.
using (xmlReader)
{
if (xmlReader != null)
{
while (xmlReader.Read())
{
if (xmlReader.NodeType == XmlNodeType.Element)
{
switch (xmlReader.Name)
{
case "a":
a = xmlReader.ReadElementContentAsString();

break;
case "b":
b = double.Parse(xmlReader.ReadElementContentAsString());

break;
case "c":
c = double.Parse(xmlReader.ReadElementContentAsString());

break;
}
}
}
}
}
}

TestXML 内容:

<a><b>26a83f12c782</b><c>128</c><d>12</d></a>

案例 b 从未被击中。但是如果我在 b 的末尾元素后添加一个空格,则情况 b 被命中。现在如何在不更改 xml 文件的情况下使其工作?

最佳答案

这是您的代码的工作版本。具体修复的问题包括:

  1. 新的 XmlReader 无法编译。这是一个抽象类。您需要使用 XmlTextReader 或另一个 XmlReader 派生类。

  2. b 不是有效的双数。您试图将一个大的十六进制数直接转换为 double ,这是不可能的。您可以在 Parse 调用中使用 NumberStyles.HexNumber,但不能使用 double,它必须是 longint.

  3. 双读。您在循环内调用了 Read(),但随后也使用了 XmlReader.ReadXxx() 方法。这是调用读取额外时间和跳过节点。这确实是您要问的主要问题。以下代码跟踪找到的最后一个元素,然后等待它到达 Text 节点进行处理。这对于简单/平面文档来说很好,但对于更复杂的文档,您需要一种更好的方式来跟踪状态,例如有限状态机。或者使用 DOM。或 LINQ。

    static void ReadXml()
    {
    string a = null;
    long b = 0;
    double c = 0;
    string text = "<a><b>26a83f12c782</b><c>128</c><d>12</d></a>";
    string element = "";


    <pre><code>using (XmlReader xmlReader = new XmlTextReader(new StringReader(text)))
    {
    while (xmlReader.Read())
    {
    if (xmlReader.NodeType == XmlNodeType.Element)
    {
    element = xmlReader.Name;
    }
    else if (xmlReader.NodeType == XmlNodeType.Text)
    {
    switch (element)
    {
    case "a":
    a = xmlReader.Value;
    Console.WriteLine("a: " + a);
    break;
    case "b":
    b = long.Parse(xmlReader.Value, NumberStyles.HexNumber);
    Console.WriteLine("b: " + b);
    break;
    case "c":
    c = double.Parse(xmlReader.Value);
    Console.WriteLine("c: " + c);
    break;
    }
    }
    }
    }
    </code></pre>

    }

关于c# - XMLTextReader 不读取元素内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3920071/

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