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 。