1

XML データを書き込もうとしている C#.NET プログラムに取り組んでいます。

SQL Server から返され、XmlReader によってアクセスされる

メソッドによって返されSqlCommand.ExecuteXmlReader()ます。

SqlCommand クエリ テキストは " SELECT ... FOR XML, ELEMENTS" です。

このコードは、XmlWriter.WriteNode() メソッドを使用して、XML データを XmlReader から XmlWriter にコピーします。

しかし、XmlWriter.WriteNode() は、要素の開始タグと終了タグを書き込みません。要素のテキスト コンテンツのみを書き込みます。

明らかに、私の意図はタグとエレメントのテキストを書くことです。コードと SELECT Query および WriteNode() メソッドからの出力を含めました。下。

XmlWriter.WriteNode() がタグを書き込まず、テキスト データのみを書き込む理由を説明している人はいますか?

C#:

protected void Page_Load(object sender, EventArgs e)
{

    XmlDocument xmlDocument = new XmlDocument();
    XPathNavigator xPathNavigator = xmlDocument.CreateNavigator();

    string connectionStr = "Data Source=.\\SQLEXPRESS;"
                                    +
                          "Initial Catalog=AdventureWorks;"
                                    +
                          "Integrated Security=True";

    using (SqlConnection sqlConnection = new SqlConnection(connectionStr))
    {
        SqlCommand sqlCommand
            = new SqlCommand("SELECT TOP 1  ContactID, " +
                             "              Title, " +
                             "        FirstName, MiddleName, LastName, " +
                             "              Suffix, " +
                             "              EmailAddress, Phone "
                                    +
                             "  FROM Person.Contact AS Contact "
                                    +
                             "  FOR XML AUTO, ELEMENTS ",         
                             sqlConnection);
        sqlConnection.Open();

        using (XmlWriter xmlWriter = xPathNavigator.PrependChild())
        {
            xmlWriter.WriteStartElement("Contacts");

            using (XmlReader xmlReader = sqlCommand.ExecuteXmlReader())
            {

                xmlWriter.WriteNode(xmlReader,
                                    true);
            }    

            xmlWriter.WriteEndElement();
        }                  
    }        

    Response.ContentType = "text/xml";
    xmlDocument.Save(Response.Output);
}            

SQL Server Management Studio で返される結果セット:

<Contact>
  <ContactID>1</ContactID>
  <Title>Mr.</Title>
  <FirstName>Gustavo</FirstName>
  <LastName>Achong</LastName>
  <EmailAddress>gustavo0@adventure-works.com</EmailAddress>
  <Phone>398-555-0132</Phone>
</Contact>

.aspx 出力:

1 グスタボ・アチョン氏 gustavo0@adventure-works.com 398-555-0132

4

1 に答える 1

0

XML を SQL XML エンティティとしてではなく、文字列としてデータセットに返してから、CDATA が削除されないように文字列を出力してみてください。

于 2012-06-07T23:18:35.850 に答える