我对使用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并测试有属性时,它说没有.我不知道我做错了什么.
true如果当前节点具有属性,则返回XmlReader.HasAttribute.当您没有进入文档时,阅读器从根元素开始,该元素<Wall>没有属性.你的其他元素也没有.
属性bar在<foo bar="baz" />.
您通常也不希望使用读者来处理XML.获取或生成XSD(对输入验证也非常有用),从该XSD生成一个类,并将传入的XML反序列化为该类的实例.然后你就可以访问了wall.Actual.Specifications[0].WallDesc.