共用方式為


使用 XPathNavigator 插入 XML 資料

更新: November 2007

XPathNavigator 類別提供一組方式,可在 XML 文件中插入同層級節點、子節點及屬性節點。為了使用這些方法,XPathNavigator 物件必須是可編輯的,也就是說,它的 CanEdit 屬性必須為 true。

可編輯 XML 文件的 XPathNavigator 物件是由 XmlDocument 類別的 CreateNavigator 方法建立的。由 XPathDocument 類別建立的 XPathNavigator 物件是唯讀的,而且如果嘗試使用由 XPathDocument 物件建立之 XPathNavigator 物件的編輯方法,則會導致 NotSupportedException

如需建立可編輯 XPathNavigator 物件的詳細資訊,請參閱 使用 XPathDocument 及 XmlDocument 讀取 XML 資料

插入節點

XPathNavigator 類別提供在 XML 文件中,插入同層級節點、子節點及屬性節點的方法。下列各節中所說明的方法,可讓您將節點及屬性插入與 XPathNavigator 物件之目前位置不同的位置。

插入同層級節點

XPathNavigator 類別提供下列方法來插入同層級節點。

這些方法可在 XPathNavigator 物件目前所在的節點前後,插入同層級節點。

InsertAfterInsertBefore 方法會多載,且接受 string、XmlReader 物件或包含同層級節點的 XPathNavigator 物件,以加入為參數。這兩種方法還會傳回用於插入同層級節點的 XmlWriter 物件。

InsertElementAfterInsertElementBefore 方法會使用指定為參數的命名空間前置詞、區域名稱、命名空間 URI 及值,在 XPathNavigator 物件目前所在的節點前後,插入單一的同層級節點。

在下列範例中,會在 contosoBooks.xml 檔案之第一個 book 項目的 price 項目子系之前,插入新的 pages 項目。

Dim document As XmlDocument = New XmlDocument()
document.Load("contosoBooks.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()

navigator.MoveToChild("bookstore", "https://www.contoso.com/books")
navigator.MoveToChild("book", "https://www.contoso.com/books")
navigator.MoveToChild("price", "https://www.contoso.com/books")

navigator.InsertBefore("<pages>100</pages>")

navigator.MoveToParent()
Console.WriteLine(navigator.OuterXml)
XmlDocument document = new XmlDocument();
document.Load("contosoBooks.xml");
XPathNavigator navigator = document.CreateNavigator();

navigator.MoveToChild("bookstore", "https://www.contoso.com/books");
navigator.MoveToChild("book", "https://www.contoso.com/books");
navigator.MoveToChild("price", "https://www.contoso.com/books");

navigator.InsertBefore("<pages>100</pages>");

navigator.MoveToParent();
Console.WriteLine(navigator.OuterXml);
XmlDocument^ document = gcnew XmlDocument();
document->Load("contosoBooks.xml");
XPathNavigator^ navigator = document->CreateNavigator();

navigator->MoveToChild("bookstore", "https://www.contoso.com/books");
navigator->MoveToChild("book", "https://www.contoso.com/books");
navigator->MoveToChild("price", "https://www.contoso.com/books");

navigator->InsertBefore("<pages>100</pages>");

navigator->MoveToParent();
Console::WriteLine(navigator->OuterXml);

範例將 contosoBooks.xml 檔案做為輸入。

<bookstore xmlns="https://www.contoso.com/books">
    <book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
        <title>The Autobiography of Benjamin Franklin</title>
        <author>
            <first-name>Benjamin</first-name>
            <last-name>Franklin</last-name>
        </author>
        <price>8.99</price>
    </book>
    <book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
        <title>The Confidence Man</title>
        <author>
            <first-name>Herman</first-name>
            <last-name>Melville</last-name>
        </author>
        <price>11.99</price>
    </book>
    <book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
        <title>The Gorgias</title>
        <author>
            <name>Plato</name>
        </author>
        <price>9.99</price>
    </book>
</bookstore>

如需 InsertAfterInsertBeforeInsertElementAfterInsertElementBefore 方法的詳細資訊,請參閱 XPathNavigator 類別參考文件。

插入子節點

XPathNavigator 類別提供下列方法來插入子節點。

這些方法會將子節點附加到 XPathNavigator 物件目前所在之節點的子節點清單結尾及開頭。

與<插入同層級節點>一節中的方法一樣,AppendChildPrependChild 方法也接受 string、XmlReader 物件或包含子節點的 XPathNavigator 物件,以加入為參數。這兩種方法還會傳回用於插入子節點的 XmlWriter 物件。

與<插入同層級節點>一節中的方法一樣,AppendChildElementPrependChildElement 方法也會使用指定為參數的命名空間前置詞、區域名稱、命名空間 URI 及值,在 XPathNavigator 物件目前所在之節點的子節點清單結尾及開頭,插入單一子節點。

在下列範例中,會將新的 pages 項目子系附加至 contosoBooks.xml 檔案中第一個 book 項目的項目子系清單。

Dim document As XmlDocument = New XmlDocument()
document.Load("contosoBooks.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()

navigator.MoveToChild("bookstore", "https://www.contoso.com/books")
navigator.MoveToChild("book", "https://www.contoso.com/books")

navigator.AppendChild("<pages>100</pages>")

Console.WriteLine(navigator.OuterXml)
XmlDocument document = new XmlDocument();
document.Load("contosoBooks.xml");
XPathNavigator navigator = document.CreateNavigator();

navigator.MoveToChild("bookstore", "https://www.contoso.com/books");
navigator.MoveToChild("book", "https://www.contoso.com/books");

navigator.AppendChild("<pages>100</pages>");

Console.WriteLine(navigator.OuterXml);
XmlDocument^ document = gcnew XmlDocument();
document->Load("contosoBooks.xml");
XPathNavigator^ navigator = document->CreateNavigator();

navigator->MoveToChild("bookstore", "https://www.contoso.com/books");
navigator->MoveToChild("book", "https://www.contoso.com/books");

navigator->AppendChild("<pages>100</pages>");

Console::WriteLine(navigator->OuterXml);

範例將 contosoBooks.xml 檔案做為輸入。

<bookstore xmlns="https://www.contoso.com/books">
    <book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
        <title>The Autobiography of Benjamin Franklin</title>
        <author>
            <first-name>Benjamin</first-name>
            <last-name>Franklin</last-name>
        </author>
        <price>8.99</price>
    </book>
    <book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
        <title>The Confidence Man</title>
        <author>
            <first-name>Herman</first-name>
            <last-name>Melville</last-name>
        </author>
        <price>11.99</price>
    </book>
    <book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
        <title>The Gorgias</title>
        <author>
            <name>Plato</name>
        </author>
        <price>9.99</price>
    </book>
</bookstore>

如需 AppendChildPrependChildAppendChildElementPrependChildElement 方法的詳細資訊,請參閱 XPathNavigator 類別參考文件。

插入屬性節點

XPathNavigator 類別提供下列方法來插入屬性節點。

這些方法可在 XPathNavigator 物件目前所在的項目節點上,插入屬性節點。CreateAttribute 方法使用指定為參數的命名空間前置詞、區域名稱、命名空間 URI 及值,在 XPathNavigator 物件目前所在的項目節點上,建立屬性節點。CreateAttributes 方法會傳回用於插入屬性節點的 XmlWriter 物件。

在下列範例中,會使用從 CreateAttributes 方法傳回的 XmlWriter 物件,在 contosoBooks.xml 檔案中第一個 book 項目的 price 項目子系上,建立新的 discount 及 currency 屬性。

Dim document As XmlDocument = New XmlDocument()
document.Load("contosoBooks.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()

navigator.MoveToChild("bookstore", "https://www.contoso.com/books")
navigator.MoveToChild("book", "https://www.contoso.com/books")
navigator.MoveToChild("price", "https://www.contoso.com/books")

Dim attributes As XmlWriter = navigator.CreateAttributes()

attributes.WriteAttributeString("discount", "1.00")
attributes.WriteAttributeString("currency", "USD")
attributes.Close()

navigator.MoveToParent()
Console.WriteLine(navigator.OuterXml)
XmlDocument document = new XmlDocument();
document.Load("contosoBooks.xml");
XPathNavigator navigator = document.CreateNavigator();

navigator.MoveToChild("bookstore", "https://www.contoso.com/books");
navigator.MoveToChild("book", "https://www.contoso.com/books");
navigator.MoveToChild("price", "https://www.contoso.com/books");

XmlWriter attributes = navigator.CreateAttributes();

attributes.WriteAttributeString("discount", "1.00");
attributes.WriteAttributeString("currency", "USD");
attributes.Close();

navigator.MoveToParent();
Console.WriteLine(navigator.OuterXml);
XmlDocument^ document = gcnew XmlDocument();
document->Load("contosoBooks.xml");
XPathNavigator^ navigator = document->CreateNavigator();

navigator->MoveToChild("bookstore", "https://www.contoso.com/books");
navigator->MoveToChild("book", "https://www.contoso.com/books");
navigator->MoveToChild("price", "https://www.contoso.com/books");

XmlWriter^ attributes = navigator->CreateAttributes();

attributes->WriteAttributeString("discount", "1.00");
attributes->WriteAttributeString("currency", "USD");
attributes->Close();

navigator->MoveToParent();
Console::WriteLine(navigator->OuterXml);

範例將 contosoBooks.xml 檔案做為輸入。

<bookstore xmlns="https://www.contoso.com/books">
    <book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
        <title>The Autobiography of Benjamin Franklin</title>
        <author>
            <first-name>Benjamin</first-name>
            <last-name>Franklin</last-name>
        </author>
        <price>8.99</price>
    </book>
    <book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
        <title>The Confidence Man</title>
        <author>
            <first-name>Herman</first-name>
            <last-name>Melville</last-name>
        </author>
        <price>11.99</price>
    </book>
    <book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
        <title>The Gorgias</title>
        <author>
            <name>Plato</name>
        </author>
        <price>9.99</price>
    </book>
</bookstore>

如需 CreateAttributeCreateAttributes 方法的詳細資訊,請參閱 XPathNavigator 類別參考文件。

複製節點

在某些情況下,您可能要使用其他 XML 文件的內容,填入 XML 文件。XPathNavigator 類別及 XmlWriter 類別可以從現有的 XmlReader 物件或 XPathNavigator 物件,將節點複製到 XmlDocument 物件。

XPathNavigator 類別的 AppendChildPrependChildInsertBeforeInsertAfter 方法都包含多載,它們可以接受 XPathNavigator 物件或 XmlReader 物件做為參數。

XmlWriter 類別的 WriteNode 方法包含可接受 XmlNodeXmlReaderXPathNavigator 物件的多載。

下列範例會將所有 book 項目,從一個文件複製到另一個文件。

Dim document As XmlDocument = New XmlDocument()
document.Load("books.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()

navigator.MoveToChild("bookstore", String.Empty)

Dim newBooks As XPathDocument = New XPathDocument("newBooks.xml")
Dim newBooksNavigator As XPathNavigator = newBooks.CreateNavigator()

Dim nav As XPathNavigator
For Each nav in newBooksNavigator.SelectDescendants("book", "", false)
    navigator.AppendChild(nav)
Next

document.Save("newBooks.xml");
XmlDocument document = new XmlDocument();
document.Load("books.xml");
XPathNavigator navigator = document.CreateNavigator();

navigator.MoveToChild("bookstore", String.Empty);
            
XPathDocument newBooks = new XPathDocument("newBooks.xml");
XPathNavigator newBooksNavigator = newBooks.CreateNavigator();

foreach (XPathNavigator nav in newBooksNavigator.SelectDescendants("book", "", false))
{
    navigator.AppendChild(nav);
}

document.Save("newBooks.xml");

插入值

XPathNavigator 類別提供 SetValueSetTypedValue 方法,以便在 XmlDocument 物件中插入節點的值。

插入不具型別值

SetValue 方法只會插入做為參數傳遞的不具型別 string 值,並將其做為 XPathNavigator 物件目前所在之節點的值。插入的值不具有任何型別,或未根據節點型別 (若提供結構描述資訊) 驗證新值的有效性。

在下列範例中,SetValue 方法用於更新 contosoBooks.xml 檔案中的所有 price 項目。

Dim document As XmlDocument = New XmlDocument()
document.Load("contosoBooks.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()

Dim manager As XmlNamespaceManager = New XmlNamespaceManager(navigator.NameTable)
manager.AddNamespace("bk", "https://www.contoso.com/books")

For Each nav As XPathNavigator In navigator.Select("//bk:price", manager)
    If nav.Value = "11.99" Then
        nav.SetValue("12.99")
    End If
Next

Console.WriteLine(navigator.OuterXml)
XmlDocument document = new XmlDocument();
document.Load("contosoBooks.xml");
XPathNavigator navigator = document.CreateNavigator();

XmlNamespaceManager manager = new XmlNamespaceManager(navigator.NameTable);
manager.AddNamespace("bk", "https://www.contoso.com/books");

foreach (XPathNavigator nav in navigator.Select("//bk:price", manager))
{
    if (nav.Value == "11.99")
    {
        nav.SetValue("12.99");
    }
}

Console.WriteLine(navigator.OuterXml);
XmlDocument^ document = gcnew XmlDocument();
document->Load("contosoBooks.xml");
XPathNavigator^ navigator = document->CreateNavigator();

XmlNamespaceManager^ manager = gcnew XmlNamespaceManager(navigator->NameTable);
manager->AddNamespace("bk", "https://www.contoso.com/books");

for each (XPathNavigator^ nav in navigator->Select("//bk:price", manager))
{
    if(nav->Value == "11.99")
    {
        nav->SetValue("12.99");
    }
}

Console::WriteLine(navigator->OuterXml);

範例將 contosoBooks.xml 檔案做為輸入。

<bookstore xmlns="https://www.contoso.com/books">
    <book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
        <title>The Autobiography of Benjamin Franklin</title>
        <author>
            <first-name>Benjamin</first-name>
            <last-name>Franklin</last-name>
        </author>
        <price>8.99</price>
    </book>
    <book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
        <title>The Confidence Man</title>
        <author>
            <first-name>Herman</first-name>
            <last-name>Melville</last-name>
        </author>
        <price>11.99</price>
    </book>
    <book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
        <title>The Gorgias</title>
        <author>
            <name>Plato</name>
        </author>
        <price>9.99</price>
    </book>
</bookstore>

插入具型別值

當節點的型別為 W3C XML 結構描述簡單型別時,會根據簡單型別的 Facet,對 SetTypedValue 方法插入的新值執行設定前的檢查。如果根據節點的型別,新值無效 (例如,在型別為 xs:positiveInteger 的項目上設定 -1 值),則會產生例外狀況。

下列範例會嘗試將 contosoBooks.xml 檔案中第一個 book 項目之 price 項目的值,變更為 DateTime 值。因為在 contosoBooks.xsd 檔案中將 price 項目的 XML 結構描述型別定義為 xs:decimal,所以這個動作會擲回例外狀況。

Dim settings As XmlReaderSettings = New XmlReaderSettings()
settings.Schemas.Add("https://www.contoso.com/books", "contosoBooks.xsd")
settings.ValidationType = ValidationType.Schema

Dim reader As XmlReader = XmlReader.Create("contosoBooks.xml", settings)

Dim document As XmlDocument = New XmlDocument()
document.Load(reader)
Dim navigator As XPathNavigator = document.CreateNavigator()

navigator.MoveToChild("bookstore", "https://www.contoso.com/books")
navigator.MoveToChild("book", "https://www.contoso.com/books")
navigator.MoveToChild("price", "https://www.contoso.com/books")

navigator.SetTypedValue(DateTime.Now)
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("https://www.contoso.com/books", "contosoBooks.xsd");
settings.ValidationType = ValidationType.Schema;

XmlReader reader = XmlReader.Create("contosoBooks.xml", settings);

XmlDocument document = new XmlDocument();
document.Load(reader);
XPathNavigator navigator = document.CreateNavigator();

navigator.MoveToChild("bookstore", "https://www.contoso.com/books");
navigator.MoveToChild("book", "https://www.contoso.com/books");
navigator.MoveToChild("price", "https://www.contoso.com/books");

navigator.SetTypedValue(DateTime.Now);

範例將 contosoBooks.xml 檔案做為輸入。

<bookstore xmlns="https://www.contoso.com/books">
    <book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
        <title>The Autobiography of Benjamin Franklin</title>
        <author>
            <first-name>Benjamin</first-name>
            <last-name>Franklin</last-name>
        </author>
        <price>8.99</price>
    </book>
    <book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
        <title>The Confidence Man</title>
        <author>
            <first-name>Herman</first-name>
            <last-name>Melville</last-name>
        </author>
        <price>11.99</price>
    </book>
    <book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
        <title>The Gorgias</title>
        <author>
            <name>Plato</name>
        </author>
        <price>9.99</price>
    </book>
</bookstore>

該範例還採用 contosoBooks.xsd 做為輸入。

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="https://www.contoso.com/books" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="bookstore">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" name="book">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="title" type="xs:string" />
                            <xs:element name="author">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element minOccurs="0" name="name" type="xs:string" />
                                        <xs:element minOccurs="0" name="first-name" type="xs:string" />
                                        <xs:element minOccurs="0" name="last-name" type="xs:string" />
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="price" type="xs:decimal" />
                        </xs:sequence>
                        <xs:attribute name="genre" type="xs:string" use="required" />
                        <xs:attribute name="publicationdate" type="xs:date" use="required" />
                        <xs:attribute name="ISBN" type="xs:string" use="required" />
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

InnerXml 及 OuterXml 屬性

XPathNavigator 類別的 InnerXmlOuterXml 屬性會變更 XPathNavigator 物件目前所在之節點的 XML 標記。

InnerXml 屬性會變更 XPathNavigator 物件目前所在之子節點的 XML 標記,以及指定 XML string 的已剖析內容。同樣地,OuterXml 屬性會變更 XPathNavigator 物件目前所在之子節點的 XML 標記,以及目前節點本身。

除了本主題中所說明的方法之外,還可以使用 InnerXmlOuterXml 屬性,將節點及值插入 XML 文件。如需使用 InnerXmlOuterXml 屬性插入節點及值的詳細資訊,請參閱 使用 XPathNavigator 修改 XML 資料 主題。

命名空間及 xml:lang 衝突

當使用 XPathNavigator 類別的 InsertBeforeInsertAfterAppendChildPrependChild 方法 (其採用 XmlReader 物件做為參數) 來插入 XML 資料時,可能會發生某些與命名空間的範圍及 xml:lang 宣告相關的衝突。

下列是可能的命名空間衝突。

  • 如果 XmlReader 物件的內容中包含範圍中的命名空間,其中命名空間 URI 對應的前置詞不在 XPathNavigator 物件的內容中,則會將新命名空間宣告加入至新插入的節點。

  • 如果相同的命名空間 URI 在 XmlReader 物件的內容及 XPathNavigator 物件內容中都在範圍內,但它們在這兩個內容中擁有不同的對應前置詞,則會將新的命名空間宣告加入至新插入的節點,並從 XmlReader 物件取得前置詞及命名空間 URI。

  • 如果相同的命名空間前置詞在 XmlReader 物件的內容及 XPathNavigator 物件的內容中都在範圍內,但在這兩個內容中擁有不同的對應命名空間 URI,則會將新的命名空間宣告加入至新插入的節點,該節點會以從 XmlReader 物件取得之命名空間 URI 來重新宣告該前置詞。

  • 如果 XmlReader 物件內容及 XPathNavigator 物件內容中的前置詞及命名空間 URI 相同,則不會將新的命名空間宣告加入至新插入的節點。

注意事項:

上述說明還適用於將空白 string 做為前置詞的命名空間宣告 (例如,預設命名空間宣告)。

下列是可能的 xml:lang 衝突。

  • 如果在 XmlReader 物件的內容中包含範圍中的 xml:lang 屬性,但 XPathNavigator 物件的內容中沒有,則會將從 XmlReader 物件取得值的 xml:lang 屬性加入至新插入的節點。

  • 如果 XmlReader 物件的內容及 XPathNavigator 物件的內容都包含範圍中的 xml:lang 屬性,但是屬性的值不同,則會將從 XmlReader 物件取得值的 xml:lang 屬性加入至新插入的節點。

  • 如果 XmlReader 物件的內容及 XPathNavigator 物件的內容都包含範圍中的 xml:lang 屬性,但是屬性的值相同,則不會將新的 xml:lang 屬性加入新插入的節點。

  • 如果 XPathNavigator 物件的內容包含範圍中的 xml:lang 屬性,但是在 XmlReader 物件的內容中沒有,則不會將 xml:lang 屬性加入至新插入的節點。

使用 XmlWriter 插入節點

多載<插入節點及值>一節中說明之用於插入同層級節點、子節點及屬性節點的方法。XPathNavigator 類別的 InsertAfterInsertBeforeAppendChildPrependChildCreateAttributes 方法會傳回用於插入節點的 XmlWriter 物件。

不支援的 XmlWriter 方法

由於 XPath 資料模型與文件物件模型 (DOM) 之間的差異,XPathNavigator 類別並不支援所有使用 XmlWriter 類別將資訊寫入 XML 文件的方法。

下表說明 XPathNavigator 類別不支援的 XmlWriter 類別方法。

方法

說明

WriteEntityRef

會擲回 NotSupportedException 例外狀況。

WriteDocType

在根層級會被忽略,如果在 XML 文件的任何其他層級呼叫,則擲回 NotSupportedException 例外狀況。

WriteCData

視為對等字元之 WriteString 方法的呼叫。

WriteCharEntity

視為對等字元之 WriteString 方法的呼叫。

WriteSurrogateCharEntity

視為對等字元之 WriteString 方法的呼叫。

如需 XmlWriter 類別的詳細資訊,請參閱 XmlWriter 類別參考文件。

多個 XmlWriter 物件

可能有多個 XPathNavigator 物件指向包含一個或多個開啟 XmlWriter 物件之 XML 文件的不同部分。單一執行緒案例中允許並支援多個 XmlWriter 物件。

下列各項是使用多個 XmlWriter 物件時,需要考慮的重要注意事項。

  • 當呼叫每個 XmlWriter 物件的 Close 方法時,會將由 XmlWriter 物件寫入的 XML 片段加入至 XML 文件。直到那時,XmlWriter 物件會寫入中斷連接的片段。如果在 XML 文件上執行作業,則不會影響在呼叫 Close 之前,由 XmlWriter 物件寫入的任何片段。

  • 如果在特定 XML 子樹狀目錄上有開啟 XmlWriter 物件,而該子樹狀目錄已刪除,則 XmlWriter 物件仍然會加入至該子樹狀目錄。該子樹狀目錄只是變成已刪除的片段。

  • 如果在 XML 文件中同時開啟多個 XmlWriter 物件,則會依照關閉 XmlWriter 物件的順序 (而非開啟它們的順序),將它們加入至 XML 文件。

下列範例會建立 XmlDocument 物件及 XPathNavigator 物件,然後使用由 PrependChild 方法傳回的 XmlWriter 物件,在 books.xml 檔案建立第一本書的結構。之後,範例會將其儲存為 book.xml 檔案。

Dim document As XmlDocument = New XmlDocument()
Dim navigator As XPathNavigator = document.CreateNavigator()

Using writer As XmlWriter = navigator.PrependChild()

    writer.WriteStartElement("bookstore")
    writer.WriteStartElement("book")
    writer.WriteAttributeString("genre", "autobiography")
    writer.WriteAttributeString("publicationdate", "1981-03-22")
    writer.WriteAttributeString("ISBN", "1-861003-11-0")
    writer.WriteElementString("title", "The Autobiography of Benjamin Franklin")
    writer.WriteStartElement("author")
    writer.WriteElementString("first-name", "Benjamin")
    writer.WriteElementString("last-name", "Franklin")
    writer.WriteElementString("price", "8.99")
    writer.WriteEndElement()
    writer.WriteEndElement()
    writer.WriteEndElement()

End Using

document.Save("book.xml")
XmlDocument document = new XmlDocument();
XPathNavigator navigator = document.CreateNavigator();

using (XmlWriter writer = navigator.PrependChild())
{
    writer.WriteStartElement("bookstore");
    writer.WriteStartElement("book");
    writer.WriteAttributeString("genre", "autobiography");
    writer.WriteAttributeString("publicationdate", "1981-03-22");
    writer.WriteAttributeString("ISBN", "1-861003-11-0");
    writer.WriteElementString("title", "The Autobiography of Benjamin Franklin");
    writer.WriteStartElement("author");
    writer.WriteElementString("first-name", "Benjamin");
    writer.WriteElementString("last-name", "Franklin");
    writer.WriteElementString("price", "8.99");
    writer.WriteEndElement();
    writer.WriteEndElement();
    writer.WriteEndElement();
}
document.Save("book.xml");

儲存 XML 文件

使用 XmlDocument 類別的方法,將用本主題中說明之方法對 XmlDocument 物件所做的變更儲存下來。如需儲存 XmlDocument 物件之變更的詳細資訊,請參閱 儲存與寫入文件

請參閱

概念

使用 XPath 資料模型處理 XML 資料

使用 XPathNavigator 修改 XML 資料

使用 XPathNavigator 移除 XML 資料

參考

XmlDocument

XPathDocument

XPathNavigator