C# 使用XmlReader如何读取空元素?
我已经使用XmlWriter编写了一个Xml文件。 代码如下:C# 使用XmlReader如何读取空元素?,c#,xml,xmlreader,C#,Xml,Xmlreader,我已经使用XmlWriter编写了一个Xml文件。 代码如下: public void WriteXml(XmlWriter writer) { writer.WriteStartElement("element1"); writer.WriteAttributeString("attrs1", Attrs1); writer.WriteAttributeString("attrs2", Attrs2);
public void WriteXml(XmlWriter writer)
{
writer.WriteStartElement("element1");
writer.WriteAttributeString("attrs1", Attrs1);
writer.WriteAttributeString("attrs2", Attrs2);
if (!string.IsNullOrWhiteSpace("element2"))
{
writer.WriteStartElement("element2");
writer.WriteCData(Element2);
writer.WriteEndElement();
}
if (!string.IsNullOrWhiteSpace("element3"))
{
writer.WriteStartElement("element3");
writer.WriteCData(Element3);
writer.WriteEndElement();
}
Element4.WriteXml(writer);
Element5.WriteXml(writer);
writer.WriteEndElement();
}
如您所见,element4调用了一个名为“WriteXml()”的方法。以下是该方法:
public void WriteXml(XmlWriter writer)
{
if (m_PropertyValueList.Count > 0)
{
writer.WriteStartElement("element4");
foreach (var p in m_PropertyValueList)
{
if (p.CurrentValue != null)
{
writer.WriteStartElement("property");
writer.WriteAttributeString("name", p.PropertyName);
writer.WriteAttributeString("value", p.CurrentValue.ToString());
writer.WriteEndElement();
}
}
writer.WriteEndElement();
}
}
public void ReadXml(XmlReader reader)
{
if ((reader.IsStartElement("element4")) && (!reader.IsEmptyElement))
{
reader.Read();
while (reader.IsStartElement("property"))
{
string propertyName = reader.GetAttribute("name");
string propertyValue = reader.GetAttribute("value");
SetValue(propertyName, propertyValue);
reader.Read();
}
//
// Read </element4>
//
reader.MoveToContent();
reader.ReadEndElement();
}
}
请注意,它检查p.CurrentValue!=无效的如果为null,则该元素应作为空元素写入。在本例中,p.CurrentValue为null,因此我确实需要一个空元素。您将在下面的Xml输出中看到,该输出将此元素编写为。对我来说,它似乎正确地写入了一个空元素,如果我在这里错了,请纠正我
Xml文件输出如下所示:
<?xml version="1.0" encoding="UTF-8"?>
-<element>
-<element 1 attrs1="Some Info" attrs2="More Info">
-<element2>
+<![CDATA[]]>
</element2>
-<element3>
-<![CDATA[ ]]>
</element3>
<element4/>
</element1>
</element>
因此,我的问题是:
当我从xml文件中读取元素时,我需要添加另一个else if条件来处理元素是否为start元素以及元素是否为空。我只是检查它是否是空的。所以它不知道如何处理它是空的。然后,当这些条件得到满足时,我只需执行reader.Read()命令应用程序按原样读取元素 下面是它的外观:
else if (reader.IsStartElement("element4")) && (reader.IsEmptyElement))
{
reader.Read();
}
1) 你能把你的问题简化成一个简单的问题吗?它相当复杂,但也不完整,因为我们不能只是复制/粘贴到VisualStudio中并运行。2) 你退房了吗对不起,这是我能做的最简单的了。我已经排除了用于读取和写入xml文件的测试方法。我想出来了。我在下面为感兴趣的人提供了一个解决方案。一个大问题的简单解决方案。
"Message: TestMethod myTestMethodName threw exception: System.Xml.XmlException 'Element' is an invalid XmlNodeType. Line 8, position 6."
else if (reader.IsStartElement("element4")) && (reader.IsEmptyElement))
{
reader.Read();
}