XmlReader.HasAttributes在创建后立即返回false

Nic*_*ert 1 c# xml xmlreader

我对使用C#的XML类比较陌生.我甚至无法让XML阅读器识别出我传递给它的字符串是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();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试阅读的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>
Run Code Online (Sandbox Code Playgroud)

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

Cod*_*ter 5

true如果当前节点具有属性,则返回XmlReader.HasAttribute.当您没有进入文档时,阅读器从根元素开始,该元素<Wall>没有属性.你的其他元素也没有.

属性bar<foo bar="baz" />.

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