XmlWriter.WriteAttributes(XmlReader, Boolean) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
当在派生类中被重写时,写出在 XmlReader 中当前位置找到的所有属性。
public:
virtual void WriteAttributes(System::Xml::XmlReader ^ reader, bool defattr);
public virtual void WriteAttributes (System.Xml.XmlReader reader, bool defattr);
abstract member WriteAttributes : System.Xml.XmlReader * bool -> unit
override this.WriteAttributes : System.Xml.XmlReader * bool -> unit
Public Overridable Sub WriteAttributes (reader As XmlReader, defattr As Boolean)
参数
- reader
- XmlReader
从其中复制属性的 XmlReader
。
- defattr
- Boolean
如果为 true
,则从 XmlReader
中复制默认属性;否则为 false
。
例外
reader
为 null
。
读取器不是定位在 element
、attribute
或 XmlDeclaration
节点上。
在上一次异步操作完成之前调用了 XmlWriter 方法。 在此情况下,会引发 InvalidOperationException 并显示消息“异步操作已在进行中。”
示例
以下示例将所有元素复制到输出,将标记名称更改为大写,并复制所有属性不变。
#using <System.Xml.dll>
using namespace System;
using namespace System::IO;
using namespace System::Xml;
void main()
{
XmlReader^ reader = XmlReader::Create( L"test1.xml" );
XmlWriterSettings^ settings = gcnew XmlWriterSettings;
settings->Indent = true;
XmlWriter^ writer = XmlWriter::Create( Console::Out );
while ( reader->Read() )
{
if ( reader->NodeType == XmlNodeType::Element )
{
writer->WriteStartElement( reader->Name->ToUpper() );
writer->WriteAttributes( reader, false );
if ( reader->IsEmptyElement )
writer->WriteEndElement();
}
else
if ( reader->NodeType == XmlNodeType::EndElement )
{
writer->WriteEndElement();
}
}
writer->Close();
reader->Close();
}
using System;
using System.IO;
using System.Xml;
public class Sample {
public static void Main() {
XmlReader reader = XmlReader.Create("test1.xml");
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
XmlWriter writer = XmlWriter.Create(Console.Out);
while (reader.Read()) {
if (reader.NodeType == XmlNodeType.Element) {
writer.WriteStartElement(reader.Name.ToUpper());
writer.WriteAttributes(reader, false);
if (reader.IsEmptyElement) writer.WriteEndElement();
}
else if (reader.NodeType == XmlNodeType.EndElement) {
writer.WriteEndElement();
}
}
writer.Close();
reader.Close();
}
}
Option Strict
Option Explicit
Imports System.IO
Imports System.Xml
Public Class Sample
Public Shared Sub Main()
Dim reader As XmlReader = XmlReader.Create("test1.xml")
Dim settings As XmlWriterSettings = new XmlWriterSettings()
settings.Indent = true
Dim writer As XmlWriter = XmlWriter.Create(Console.Out)
While reader.Read()
If reader.NodeType = XmlNodeType.Element Then
writer.WriteStartElement(reader.Name.ToUpper())
writer.WriteAttributes(reader, False)
If reader.IsEmptyElement Then
writer.WriteEndElement()
End If
Else
If reader.NodeType = XmlNodeType.EndElement Then
writer.WriteEndElement()
End If
End If
End While
writer.Close()
reader.Close()
End Sub
End Class
该示例使用该文件 test1.xml
作为输入。
<test a="1" b="2">
<item c="3" d="4" e="5" f="6"/>
</test>
注解
如果读取器位于 element
节点上 WriteAttributes
,则复制所有包含的属性。 如果读取器位于 attribute
节点上,则此方法将写入当前属性,然后写入其余属性,直到元素结束标记为止。 如果读取器位于节点上 XmlDeclaration
,此方法将写入声明中的所有属性。 如果读取器位于任何其他节点类型上,则此方法将引发一个 XmlException。
如果使用此方法 XmlValidatingReader,请确保格式正确的 XML 任何内容 (已从实体扩展,) 可能导致在写入时替换无效的文档。 例如,如果某个属性包含 >
已展开的实体,以确保用写出 >
时替换扩展>格式良好的文档。
有关此方法的异步版本,请参阅 WriteAttributesAsync。