0

非常に基本的な質問に聞こえるかもしれませんが、ここにあります。このサンプル XML を DOM にロードしました

<message from="fromvalue" to="tovalue" xml:lang="en" type="chat">
   <thread>{fe422b47-9856-4404-8c35-5ff45e43ee01}</thread> 
   <body>Test buddy</body> 
   <active xmlns="http://XXXX.org/protocol/chatstates" /> 
 </message>

これは、次のコードを使用してリクエスト本文から受け取っています

StreamReader reader = new StreamReader ( HttpContext.Request.InputStream,        System.Text.Encoding.UTF8 );
string sXMLRequest = reader.ReadToEnd ( );
XmlDocument xmlRequest = new XmlDocument ( );
xmlRequest.LoadXml ( sXMLRequest );

今私が持つ必要があるのは、3 つの異なる変数の 3 つの値だけです

string bodytext = {body element inner text}
string msgfrom = {from attribute value of message element}
string msgto =   {to attribute value of message element}

私はC#を使用しています。貴重な時間を割いて、私を導いてくれる人はいますか?

4

4 に答える 4

5

ここでは LINQ to XML を使用します。はるかに簡単です。

XDocument doc = XDocument.Load(HttpContext.Request.InputStream);
string bodyText = (string) doc.Root.Element("body");
string fromAddress = (string) doc.Root.Attribute("from");
string toAddress = (string) doc.Root.Attribute("to");

nullこれにより、存在しない要素/属性の値が得られます。代わりに NullReferenceException に満足している場合:

XDocument doc = XDocument.Load(HttpContext.Request.InputStream);
string bodyText = doc.Root.Element("body").Value;
string fromAddress = doc.Root.Attribute("from").Value;
string toAddress = doc.Root.Attribute("to").Value;
于 2012-08-15T14:49:40.670 に答える
2

XDocument.NET3.5で導入された新しいXMLパーサーであるものを使用できます。

XDocument doc = XDocument.Parse(sXMLRequest);
string bodytext = doc.Element("message").Element("body").Value;
string msgfrom = doc.Element("message").Attribute("from").Value;
string msgto = doc.Element("message").Attribute("to").Value;
于 2012-08-15T14:49:09.887 に答える
0

私はXLINQをはるかに好みますが、あなたの例では:

XmlNode thread_node = xmlRequest.SelectSingleNode("/message/thread");
Guid thread = thread_node.InnerText;

XmlNode body_node = xmlRequest.SelectSingleNode("/message/body");
string body= body_node.InnerText;

等...

于 2012-08-15T14:49:39.123 に答える
-1

Xml と C# クラスの間でシリアル化/逆シリアル化するのは非常に簡単です。

http://www.switchonthecode.com/tutorials/csharp-tutorial-xml-serialization

基本的には、Xml の要素と属性を保持するクラスを作成し、それらに [XmlElement] および [XmlAttribute] 属性を貼り付けて、XmlSerializer.

他にもオプションがあります。すでに述べたのは、XmlReader多くの作業/メンテナンスが必要であり、通常は大きなドキュメントにのみ使用されます。私が見た他の回答では、使いやすく、そのようなプロキシクラスを使用しない、より高い抽象化レベルのリーダーを使用しています。好みの問題だと思います。

于 2012-08-15T14:49:55.103 に答える