다음을 통해 공유


XPathNavigator를 사용하여 XML 데이터 제거

이 클래스는 XPathNavigator XML 문서에서 노드 및 값을 제거하는 데 사용되는 메서드 집합을 제공합니다. 이러한 메서드를 사용하려면 XPathNavigator 개체를 편집할 수 있어야 합니다. 즉, CanEdit 속성이 true일 수 있어야 합니다.

XPathNavigatorXML 문서를 편집할 수 있는 개체는 클래스의 CreateNavigator 메서드에 XmlDocument 의해 만들어집니다. XPathNavigator클래스에서 생성된 XPathDocument 개체는 읽기 전용이며, XPathNavigator 개체에서 생성된 XPathDocument 개체의 편집 메서드를 사용하려고 하면 NotSupportedException가 발생합니다.

편집 가능한 XPathNavigator 개체를 만드는 방법에 대한 자세한 내용은 XPathDocument 및 XmlDocument를 사용하여 XML 데이터 읽기를 참조하세요.

노드 제거

이 클래스는 XPathNavigator XML 문서에서 노드를 제거하는 메서드를 제공합니다 DeleteSelf .

노드 제거

이 클래스는 XPathNavigator XML 문서에서 개체가 현재 배치된 현재 노드 DeleteSelf 를 삭제하는 메서드를 제공합니다XPathNavigator.

메서드를 사용하여 노드를 DeleteSelf 삭제한 후에는 더 이상 개체의 XmlDocument 루트에서 노드에 연결할 수 없습니다. 노드가 삭제 XPathNavigator 된 후 삭제된 노드의 부모 노드에 배치됩니다.

삭제 작업은 삭제된 노드에 배치된 개체의 XPathNavigator 위치에 영향을 주지 않습니다. 이러한 XPathNavigator 개체는 삭제된 하위 트리 내에서 이동할 수 있지만 클래스의 XPathNavigator 일반 노드 집합 탐색 메서드를 사용하여 주 노드 트리로 이동할 수 없다는 점에서 유효합니다.

비고

클래스의 MoveTo 메서드를 XPathNavigator 사용하여 이러한 XPathNavigator 개체를 주 노드 트리로 다시 이동하거나 주 노드 트리에서 삭제된 하위 트리로 이동할 수 있습니다.

다음 예제에서는 price 메서드를 사용하여 book 파일의 첫 번째 contosoBooks.xml 요소의 DeleteSelf 요소가 삭제됩니다. 요소가 삭제된 후 개체의 XPathNavigatorprice 위치는 부모 book 요소에 있습니다.

Dim document As XmlDocument = New XmlDocument()  
document.Load("contosoBooks.xml")  
Dim navigator As XPathNavigator = document.CreateNavigator()  
  
navigator.MoveToChild("bookstore", "http://www.contoso.com/books")  
navigator.MoveToChild("book", "http://www.contoso.com/books")  
navigator.MoveToChild("price", "http://www.contoso.com/books")  
  
navigator.DeleteSelf()  
  
Console.WriteLine("Position after delete: {0}", navigator.Name)  
Console.WriteLine(navigator.OuterXml)  
XmlDocument document = new XmlDocument();  
document.Load("contosoBooks.xml");  
XPathNavigator navigator = document.CreateNavigator();  
  
navigator.MoveToChild("bookstore", "http://www.contoso.com/books");  
navigator.MoveToChild("book", "http://www.contoso.com/books");  
navigator.MoveToChild("price", "http://www.contoso.com/books");  
  
navigator.DeleteSelf();  
  
Console.WriteLine("Position after delete: {0}", navigator.Name);  
Console.WriteLine(navigator.OuterXml);  

이 예제에서는 파일을 입력으로 사용합니다 contosoBooks.xml .

<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://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>

특성 노드 제거

특성 노드는 메서드를 사용하여 DeleteSelf XML 문서에서 제거됩니다.

특성 노드가 삭제된 후에는 개체의 XmlDocument 루트 노드에서 더 이상 연결할 수 없으며 XPathNavigator 개체가 부모 요소에 배치됩니다.

기본 특성

특성을 제거하는 데 사용되는 방법에 관계없이 XML 문서의 DTD 또는 XML 스키마에서 기본 특성으로 정의된 특성을 제거하는 데 특별한 제한이 있습니다. 기본 특성은 해당 특성이 속한 요소도 제거하지 않는 한 제거할 수 없습니다. 기본 특성이 선언된 요소에는 항상 기본 특성이 있으므로 기본 특성을 삭제하면 대체 특성이 요소에 삽입되고 선언된 기본값으로 초기화됩니다.

값 제거

XPathNavigator 클래스는 XML 문서에서 형식화되지 않은 값과 형식화된 값을 제거하는 메서드 SetValueSetTypedValue를 제공합니다.

형식화되지 않은 값 제거

메서드는 매개 변수로 전달된 형식이 지정되지 않은 SetValue 값을 string 객체가 현재 위치한 노드 XPathNavigator의 값으로 단순히 삽입합니다. 메서드에 빈 문자열을 SetValue 전달하면 현재 노드의 값이 제거됩니다.

다음 예제에서는 price 파일의 첫 번째 book 요소에서 contosoBooks.xml 요소의 값을 SetValue 메서드를 사용하여 제거합니다.

Dim document As XmlDocument = New XmlDocument()  
document.Load("contosoBooks.xml")  
Dim navigator As XPathNavigator = document.CreateNavigator()  
  
navigator.MoveToChild("bookstore", "http://www.contoso.com/books")  
navigator.MoveToChild("book", "http://www.contoso.com/books")  
navigator.MoveToChild("price", "http://www.contoso.com/books")  
  
navigator.SetValue("")  
  
navigator.MoveToRoot()  
Console.WriteLine(navigator.OuterXml)  
XmlDocument document = new XmlDocument();  
document.Load("contosoBooks.xml");  
XPathNavigator navigator = document.CreateNavigator();  
  
navigator.MoveToChild("bookstore", "http://www.contoso.com/books");  
navigator.MoveToChild("book", "http://www.contoso.com/books");  
navigator.MoveToChild("price", "http://www.contoso.com/books");  
  
navigator.SetValue("");  
  
navigator.MoveToRoot();  
Console.WriteLine(navigator.OuterXml);  

이 예제에서는 파일을 입력으로 사용합니다 contosoBooks.xml .

<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://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 스키마 단순 형식인 경우 메서드에 의해 SetTypedValue 삽입된 새 값은 값을 설정하기 전에 단순 형식의 패싯에 대해 검사됩니다. 노드의 형식에 따라 새 값이 유효하지 않은 경우(예: 형식-1이 있는 요소의 xs:positiveInteger 값 설정) 예외가 발생합니다. SetTypedValue 메서드는 null을(를) 매개 변수로 받을 수 없습니다. 따라서 형식화된 노드의 값을 제거하려면 노드의 스키마 형식을 준수해야 합니다.

다음 예제에서는 price 메서드를 사용하여 book 파일의 첫 번째 contosoBooks.xml 요소 내 SetTypedValue 요소의 값을 0로 설정하여 제거합니다. 노드 값은 제거되지 않지만 책 가격은 데이터 형식 xs:decimal에 따라 제거되었습니다.

Dim settings As XmlReaderSettings = New XmlReaderSettings()  
settings.Schemas.Add("http://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", "http://www.contoso.com/books")  
navigator.MoveToChild("book", "http://www.contoso.com/books")  
navigator.MoveToChild("price", "http://www.contoso.com/books")  
  
navigator.SetTypedValue(0)  
  
navigator.MoveToRoot()  
Console.WriteLine(navigator.OuterXml)  
XmlReaderSettings settings = new XmlReaderSettings();  
settings.Schemas.Add("http://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", "http://www.contoso.com/books");  
navigator.MoveToChild("book", "http://www.contoso.com/books");  
navigator.MoveToChild("price", "http://www.contoso.com/books");  
  
navigator.SetTypedValue(0);  
  
navigator.MoveToRoot();  
Console.WriteLine(navigator.OuterXml);  

네임스페이스 노드

XmlDocument 개체에서 네임스페이스 노드를 삭제할 수 없습니다. 메서드를 사용하여 네임스페이스 노드를 삭제하려고 시도하면 DeleteSelf 예외가 발생합니다.

InnerXml 및 OuterXml 속성

클래스의 InnerXmlOuterXml 속성은 XPathNavigator 개체가 현재 위치한 노드의 XML 마크업을 변경합니다.

현재 InnerXml 개체가 위치한 자식 노드의 XML 마크업을 지정된 XPathNavigator XML의 구문 분석된 내용으로 변경합니다 string. 마찬가지로 이 속성은 OuterXml 현재 노드 XPathNavigator 자체뿐만 아니라 개체가 현재 배치된 자식 노드의 XML 태그를 변경합니다.

이 항목 InnerXml 에 설명된 메서드 외에도 XML 문서에서 노드 및 값을 제거하는 데 해당 및 OuterXml 속성을 사용할 수 있습니다. InnerXmlOuterXml 속성을 사용하여 노드를 수정하는 방법에 대한 자세한 내용은 XPathNavigator를 사용한 XML 데이터 수정 항목을 참조하세요.

XML 문서 저장

이 항목에 XmlDocument 설명된 메서드의 결과로 개체에 대한 변경 내용을 저장하는 작업은 클래스의 XmlDocument 메서드를 사용하여 수행됩니다. 개체의 변경 내용을 XmlDocument 저장하는 방법에 대한 자세한 내용은 문서 저장 및 쓰기를 참조하세요.

참고하십시오