クラス構造がxmlファイルからのデータを表すxmlリーダーを書いています..
例として:
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
</book>
</catalog>
ノードに子ノードが含まれていることを確認するにはどうすればよいですか? isempty要素法を使いました!しかし、例外があります。
public element read(XmlReader xml)
{
element elem = new element();
while (xml.Read())
{
if (xml.IsEmptyElement)
{
elem.ElemName = xml.Name;
if (xml.HasAttributes)
{
for (int i = 0; i <= xml.AttributeCount; i++)
{
xml.MoveToNextAttribute();
attribute attrib = new attribute();
attrib.AttName = xml.Name;
attrib.AttValue = xml.Value;
elem.Attributes.Add(attrib);
}
}
return elem;
}
else
{
elem.ElemName = xml.Name;
if (xml.HasAttributes)
{
for (int i = 1; i < xml.AttributeCount; i++)
{
xml.MoveToNextAttribute();
attribute attrib = new attribute();
attrib.AttName = xml.Name;
attrib.AttValue = xml.Value;
elem.Attributes.Add(attrib);
}
}
elem.subElems.Add(read(xml)); -> Object reference not set to an instance of an object.
return elem;
}
}
return elem;
}
私は2つのクラスを使用しています。1 つは要素と呼ばれ、もう 1 つは属性と呼ばれます。ここで行っているのは、1 行ずつ進み、要素を見つけたら要素型オブジェクトを作成することです。次に、その要素に属性が含まれているかどうかを確認します。その場合、遭遇した属性の属性タイプ オブジェクトを作成し、それらを要素オブジェクト内の属性リストに追加します。次に、サブ要素をチェックし、見つかった場合は、それらを個別の要素オブジェクトとしてメイン要素オブジェクトのリストに追加します。
class element
{
private String elemName;
public String ElemName
{
get { return elemName; }
set { elemName = value; }
}
private String elemValue;
public String ElemValue
{
get { return elemValue; }
set { elemValue = value; }
}
private List<attribute> attributes;
internal List<attribute> Attributes
{
get { return attributes; }
set { attributes = value; }
}
private List<element> SubElems;
internal List<element> subElems
{
get { return SubElems; }
set { SubElems = value; }
}
}
class attribute
{
private String Name;
public String AttName
{
get { return Name; }
set { Name = value; }
}
private String value;
public String AttValue
{
get { return this.value; }
set { this.value = value; }
}
}