【问题标题】:XmlReader.HasAttributes returns false immediately after creationXmlReader.HasAttributes 在创建后立即返回 false
【发布时间】:2015-09-17 15:10:26
【问题描述】:

我对使用 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();
            }
        }
    }
}

这是我要阅读的 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 并测试是否有属性时,它说没有。我不知道我做错了什么。

【问题讨论】:

  • 回答您的确切问题“我做错了什么” - 不检查文档,也没有为您的帖子提供好的标题。
  • 旁注:帖子中的 XML 没有属性,因此即使您实际阅读过它,也不会出现 HasAttributes 为真的情况 - 您可能需要更新发布以显示带有属性的 XML。
  • 我正在编写的应用程序必须按原样读取 XML,所以我需要一种可以按原样读取此 XML 的方法...

标签: c# xml xmlreader


【解决方案1】:

如果当前节点有属性,XmlReader.HasAttribute 返回true。由于您没有进入文档,因此阅读器从没有属性的根元素&lt;Wall&gt; 开始。你的任何其他元素也一样。

&lt;foo bar="baz" /&gt; 中的属性是 bar

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-03-09
  • 2017-06-25
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
相关资源
最近更新 更多