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
.
我对使用 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
.