XmlReader.HasAttributes returns 创建后立即为 false

XmlReader.HasAttributes returns false immediately after creation

我对使用 C# XML 类 比较陌生。我什至不能得到 XML reader 来识别我传递给它的字符串是 XML。这是我用来测试基本 Xml 阅读

的单元测试
[TestFixture()]
public class LegacyWallTests
{
    [Test()]
    public void ReadLegacyWallFile()
    {
        var legacyWallText = legacyfiles.legacywall1;
        {
            string xmlString = legacyfiles.legacywall1;
            using (XmlReader reader = XmlReader.Create(new StringReader(xmlString)))
            {
                reader.HasAttributes.Should().BeTrue();
            }
        }
    }
}

这里是 XML 我正在尝试阅读

<Wall>
  <Actual>
    <Specifications>
      <Insertion> 375.6858 916.8871 0.0000 </Insertion>
      <Angle> 3.14159 </Angle>
      <WallDesc> E4-1, H: 8' 1 1/8, Sh: Yes, S: 2~4~2~9-0-0~SPF~~, Spc: Single @ 16 in OC, BP: 2~4~2~12-0-0~SYP~~, CP: 2~4~2~12-0-0~SYP~~, TP: 2~4~2~12-0-0~SYP~~,\P LI: Single @ 38.75000000, CB: No, VB: No, NCT: 2~4~2~9-0-0~SPF~~, CT: 2~4~2~9-0-0~SPF~~, Pac: 2~4~2~9-0-0~SPF~~, Mir: Yes </WallDesc>
      <WallNum> 1 </WallNum>
      <VaporBarrier></VaporBarrier>
    </Specifications>
  </Actual>
</Wall>

legacyfiles.legacywall1 是我添加到项目资源中的 xml 文件的名称。我知道正在读取 xml 文件,因为将该字符串输出到控制台会为我提供文件中的 xml。但是,当我创建 XmlReader 并测试是否存在属性时,它说没有任何属性。我不知道我做错了什么。

XmlReader.HasAttribute returns true 如果当前节点有属性。由于您没有进入文档,因此 reader 从根元素 <Wall> 开始,它没有属性。你的任何其他元素也不行。

<foo bar="baz" /> 中的一个属性是 bar

您通常也不希望使用 reader 来扰乱 XML。获取或生成一个 XSD(对于输入验证也非常有用),从该 XSD 生成一个 class 并将传入的 XML 反序列化为该 [=22= 的实例].然后你就可以访问 wall.Actual.Specifications[0].WallDesc.