XmlWriter.WriteNode() 不为任何元素写入标记

本文关键字:元素 任何 WriteNode XmlWriter | 更新日期: 2023-09-27 18:36:35

我正在开发一个尝试写入XML数据的C#.NET程序

从 SQL Server 返回,将由 XmlReader 访问

SqlCommand.ExecuteXmlReader() 方法返回。

SqlCommand 查询文本是"SELECT ... FOR XML, ELEMENTS"。

该代码将 XML 数据从 XmlReader 复制到 XmlWriter,通过使用 XmlWriter.WriteNode() 方法。

但是 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

XmlWriter.WriteNode() 不为任何元素写入标记

尝试不将 XML 作为 SQL XML 实体返回,而是作为字符串在数据集中返回,然后打印字符串,以便 CDATA 不会被剥离。