アップデート:
コードを少し説明するコメントを受け取ったので、少し説明します。
まず、言語としての XML は構造化のために設計されています。その構造と使いやすさ。言語間またはアプリケーション間でシームレスにデータを迅速に解析するための柔軟性と能力を提供します。元の質問では、テキストボックスがコードの文字列値を生成していると述べていますtextbox.text
。
XML は構造化する必要があります。構造の例は次のとおりです。
<Furniture>
<Table>
<Color> Red </Color>
<Quality> 10 </Quality>
<Material> Wood </Material>
</Table>
</Furniture>
したがって、XML を読み取る場合は、root
タグを見つけることになります。他のすべてのコンポーネントはnodes
. これらのノードは、テキストボックスに表示したい適切な相関関係を得るために、インデックスを作成するか、吸い上げる必要があります。
それがこのコードが行っていることです。ステップごとに分解していきます。
// String you will format with the XML Structure.
StringBuilder output = new StringBuilder();
次の部分は次のようになります。
// Create an XML Reader, by wrapping it in the 'using' it will ensure once your done the object is disposed of. Rather then leaving the connection to your document open.
using (XmlReader reader = XmlReader.Create(new StringReader(xmlString)))
{
// We will read our document to the following; hold to that attribute. The attribute is identifying the node and all of the child elements that reside within it: So in our case Table.
reader.ReadToFollowing("Table");
reader.MoveToFirstAttribute();
string color = reader.Value;
output.AppendLine("The color of the table " + color);
// As you can see there isn't anything fancy here, it reads to our root node. Then moves to the first child element. Then it creates a string and appends it. Keep in mind we are using our StringBuilder so we are just appending to that structure.
reader.ReadToFollowing("Material");
output.AppendLine("The material: " + reader.ReadElementContentAsString());
// Same result as we used earlier; just a different method to attain our value.
}
// Now we output our block.
OutputTextBlock.Text = output.ToString();
これで、すべてのデータが文字列にプッシュされます。明らかに、上記のコードをテキストボックスで使用して、これらの値も取得できます。
これが、アプリケーションで XML を正しく受け取る方法です。しかし、あなたは前に2つのことを述べました。したがって、テキストボックスを使用してドキュメントに物理的に書き込もうとしているように思えますが、これは XmlWriter を介して行うことができます。
ただし、テキストボックスに関する限りtextbox.text
、値に関連付けられているため、テキストボックスを受け取り続ける理由もあります。あなたの構造は、この文字列が値であることを示しています。
あなたの目標を達成するために; 値をドキュメントに書き込むメソッドがあります。それから別の人がそれを読みます。ドキュメントの内外でデータを適切に移行し、正しく表現されるようにします。
<Quality>Textbox1.Text</Quality>
これにより、テキストボックスの値がドキュメントとテキストボックスに自動的に読み込まれなくなります。ノードに文字列値を割り当てます。ドキュメントを読み取る前に、ドキュメントに値を物理的に書き込む必要があります。
MSDN には、データを適切に解析する方法の例があります。うまくいけば、問題が発生している理由のいくつかが明らかになりました。
より多くのコード; MSDN から直接: MSDN から直接:
StringBuilder output = new StringBuilder();
String xmlString =
@"<?xml version='1.0'?>
<!-- This is a sample XML document -->
<Items>
<Item>test with a child element <more/> stuff</Item>
</Items>";
// Create an XmlReader
using (XmlReader reader = XmlReader.Create(new StringReader(xmlString)))
{
XmlWriterSettings ws = new XmlWriterSettings();
ws.Indent = true;
using (XmlWriter writer = XmlWriter.Create(output, ws))
{
// Parse the file and display each of the nodes.
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
writer.WriteStartElement(reader.Name);
break;
case XmlNodeType.Text:
writer.WriteString(reader.Value);
break;
case XmlNodeType.XmlDeclaration:
case XmlNodeType.ProcessingInstruction:
writer.WriteProcessingInstruction(reader.Name, reader.Value);
break;
case XmlNodeType.Comment:
writer.WriteComment(reader.Value);
break;
case XmlNodeType.EndElement:
writer.WriteFullEndElement();
break;
}
}
}
}
OutputTextBlock.Text = output.ToString();
また
StringBuilder output = new StringBuilder();
String xmlString =
@"<bookstore>
<book genre='autobiography' publicationdate='1981-03-22' ISBN='1-861003-11-0'>
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
</bookstore>";
// Create an XmlReader
using (XmlReader reader = XmlReader.Create(new StringReader(xmlString)))
{
reader.ReadToFollowing("book");
reader.MoveToFirstAttribute();
string genre = reader.Value;
output.AppendLine("The genre value: " + genre);
reader.ReadToFollowing("title");
output.AppendLine("Content of the title element: " + reader.ReadElementContentAsString());
}
OutputTextBlock.Text = output.ToString();